EC-CUBEの検証ブランチでcodeceptionを走らせる手順をメモ
困ったkとがあったら追記して行きます。
手順
codeceptionのリポジトリをclone
リポジトリはこちら
.env
の調整
.env
でテスト対象のソースを指定できる。
例えば https://github.com/okazy/ec-cube.git
リポジトリの styleguide-category
ブランチをテストしたいときは以下のように書き換える
ECCUBE_BRANCH=styleguide-category
ECCUBE_REPOS=https://github.com/okazy/ec-cube.git
ビルド
docker-compose -f docker-compose.yml -f docker-compose.chrome.yml -f docker-compose.pgsql.yml -f docker-compose.dev.yml build --pull --no-cache
--no-cache
をつけないと2回目以降キャッシュからビルドされるので本体のソースコードの変更が反映されない。
実行
docker-compose -f docker-compose.yml -f docker-compose.chrome.yml -f docker-compose.pgsql.yml -f docker-compose.dev.yml run --rm codecept run -d --env chrome,pgsql --coverage --coverage-html --coverage-xml --html report.html acceptance EA01TopCest:topページ_初期表示
EA01TopCest:topページ_初期表示
の部分を変更することで実行対象のclassやmethodを指定できる。
実行結果を確認
実行結果は以下のディレクトリに出力される。
eccube-codeceptionのリポジトリ/tests/_output
結果のまとめは以下のhtmlをブラウザで表示することで確認できる。
eccube-codeceptionのリポジトリ/tests/_output/report.html
実際のEC-CUBEを触って確認
以下で確認可能
実行画面確認
codeceptionの実行時にVNCで実行時の画面が確認できる。
Macでは以下のコマンドでVNCが起動できる。
open vnc://:secret@localhost:5900
起動中のdockerを停止
以下のコマンドで起動中のdockerを停止できる。
docker-compose down -v -t 0
down
は stop
と rm
ができるコマンド。
-v
オプションでvolumeも一緒に削除してくれる。
-t 0
オプションでdockerの状態を待たずに直ちに実行できる。
ソースコードを更新した時の再実行の手順
codeceptionのソースコードを更新した
こちらの docker-compose run
からでOK
codeceptionのdockerは毎回実行時に作成される。
EC-CUBE本体のソースコードを変更した
ローカルのリポジトリをマウントする(おすすめ)
ローカルのEC-CUBEのリポジトリをDocker内のEC-CUBEのソースにマウントする設定を追加する。
codeceptionのリポジトリ直下に docker-compose.local.yml
ファイルを作成する。
EC-CUBEのリポジトリへのpathは適宜書き換えてください。
version: "2"
services:
eccube3:
volumes:
- /path/to/ec-cube/app:/var/www/html/app:cached
- /path/to/ec-cube/src:/var/www/html/src:cached
- /path/to/ec-cube/html:/var/www/html/html:cached
runコマンドに -f docker-compose.local.yml
オプションをつけて実行する。
こうするとローカルのソースコードの変更がDocker内のコードにリアルタイムに反映される。
ただし、書き換えるコードによってはキャッシュを削除する必要があるので注意が必要。
再ビルド
こちらの docker-compose build
から再実行が必要
EC-CUBEのソースはbuild時にcloneされるためimageを作り直す必要がある。
実行時は--no-cache
オプションを忘れないように。
docker ssh
してソースを書き換える
部分的に変更するだけなら 'docker ssh` でeccubeのdockerにアクセスして直接ソースを書き換えることもできる。
こちらの場合はdockerにviがデフォルトで入っていないのでapt-getでviをインストールするところからする必要がある。
困った時は以下もご確認ください
codeceptionのキャッシュ削除
実行時に以下のようなエラーが出た。
In SaveEventSubscriber.php line 49:
[Symfony\Component\Debug\Exception\FatalThrowableError]
Type error: Argument 1 passed to Eccube\Doctrine\EventSubscriber\SaveEventSubscriber::__construct() must be an instance of Eccube\R
equest\Context, instance of Eccube\Application given, called in /var/www/var/cache/test/ContainerDfqzc3l/EccubeTestProjectContainer
.php on line 1715
codeceptionのキャッシュが残ってしまっていたので以下の手順で削除するとエラーは解消した。
- DockerのVolumeを確認
docker volume ls
- codeceptionのキャッシュのVolume
eccubecodeception_codecept_eccube_var
を削除docker volume rm eccubecodeception_codecept_eccube_var
- もう一度codeceptionを実行
volumがたまってしまったら削除
PostgreSQLのvolume(volume名がハッシュのような文字列となっているもの)はrunの時に毎回作成されるので消すのをミスるとたまり続ける。
不要なもので、Discを圧迫してしまうので気づいたら消しておこう。
docker volume ls
docker volume rm $(docker volume ls -q | grep -E '.{64}')
docker volume ls
imagesがたまるので削除
buildするたびにEC-CUBEをcloneしてくるのでimagesがたまり続けてしまう。
以下のコマンドで古いimagesを削除できる。
docker images -a
docker rmi $(docker images -f 'dangling=true' -q)
docker images -a