LoginSignup
0
1

More than 5 years have passed since last update.

EC-CUBEのSymfony検証ブランチでcodeceptionを走らせる手順

Last updated at Posted at 2018-03-08

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

downstoprm ができるコマンド。
-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は適宜書き換えてください。

docker-compose.local.yml
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のキャッシュが残ってしまっていたので以下の手順で削除するとエラーは解消した。

  1. DockerのVolumeを確認
    • docker volume ls
  2. codeceptionのキャッシュのVolume eccubecodeception_codecept_eccube_var を削除
    • docker volume rm eccubecodeception_codecept_eccube_var
  3. もう一度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
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1