個人的なメモ書き。Larave5 のプロジェクトで CodeCeptionでテストしながら作っていく形
Version
- laravel/framework: 5.2.*
- codeception/codeception: 2.2
Install
よく使うものをインストール
composer require laravelcollective/html
composer require barryvdh/laravel-ide-helper
composer require doctrine/dbal
composer require barryvdh/laravel-debugbar
テスト環境のパッケージインストール
composer require codeception/codeception --dev
composer require site5/phantoman --dev
composer require codeception/phpbuiltinserver --dev
テスト環境を作成
CodeCeptionに向いたテスト環境にはなってないので、CodeCeptionでテスト環境を作成
./vendor/bin/codecept bootstrap
Welcomeページのテスト
Functional テストで、Welcome が出るか確認する為のテストを作成。
./vendor/bin/codecept generate:cept functional WelcomePageCept
作成されたファイルの中身を少し変更。
<?php
$I = new FunctionalTester($scenario);
$I->wantTo('perform actions and see result');
$I->amOnPage('/');
$I->see('laravel');
そしておもむろに実行する。
./vendor/bin/codecept run
Codeception PHP Testing Framework v2.2.2
Powered by PHPUnit 4.8.26 by Sebastian Bergmann and contributors.
Acceptance Tests (0) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Functional Tests (1) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
E WelcomePageCept: Perform actions and see result (0.0s)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Unit Tests (0) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Time: 334 ms, Memory: 12.00MB
There was 1 error:
---------
1) WelcomePageCept: Perform actions and see result
Test tests/functional/WelcomePageCept.php
[RuntimeException] Call to undefined method FunctionalTester::amOnPage
# 1 ./tests/functional/WelcomePageCept.php:4
FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
おこなの。
CodeCeptionで、Laravel5 のモジュールを読んでいないので、読ませるようにします。
tests/functional.suite.yml
# Codeception Test Suite Configuration
#
# Suite for functional (integration) tests
# Emulate web requests and make application process them
# Include one of framework modules (Symfony2, Yii2, Laravel5) to use it
class_name: FunctionalTester
modules:
enabled:
# add framework module here
- \Helper\Functional
- Laravel5 # この行を追加
そして実行。
./vendor/bin/codecept run
Codeception PHP Testing Framework v2.2.2
Powered by PHPUnit 4.8.26 by Sebastian Bergmann and contributors.
Acceptance Tests (0) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Functional Tests (1) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- WelcomePageCept: Perform actions and see result
[PDOException]
SQLSTATE[HY000] [2002] Connection refused
run [--report] [--html [HTML]] [--xml [XML]] [--tap [TAP]] [--json [JSON]] [--colors] [--no-colors] [--silent] [--steps] [-d|--debug] [--coverage [COVERAGE]] [--coverage-html [COVERAGE-HTML]] [--coverage-xml [COVERAGE-XML]] [--coverage-text [COVERAGE-TEXT]] [--no-exit] [-g|--group GROUP] [-s|--skip SKIP] [-x|--skip-group SKIP-GROUP] [--env ENV] [-f|--fail-fast] [--no-rebuild] [--] [<suite>] [<test>]
DB 周りで怒られてますので設定してやります。
テスト環境のデータベースまわり
テスト環境なので、.env
を .env.testing
にコピーして、下記のように、DB_CONNECTION
だけを残して値を変更します。
.env.testing
DB_CONNECTION=sqlite_testing
そして、sqlite
をメモリー上で動くようにします。
config/database.php
<?php
return [
'fetch' => PDO::FETCH_CLASS,
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
// テスト用の設定
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
],
'migrations' => 'migrations',
'redis' => [
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
];
環境設定を .env
を読み込んでいるので、.env.testing
を読ませるようにします。
tests/functional.suite.yml
# Codeception Test Suite Configuration
#
# Suite for functional (integration) tests
# Emulate web requests and make application process them
# Include one of framework modules (Symfony2, Yii2, Laravel5) to use it
class_name: FunctionalTester
modules:
enabled:
# add framework module here
- \Helper\Functional
- Laravel5: # この行を追加
environment_file: .env.testing
そして実行。
$ ./vendor/bin/codecept run
Codeception PHP Testing Framework v2.2.2
Powered by PHPUnit 4.8.26 by Sebastian Bergmann and contributors.
Acceptance Tests (0) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Functional Tests (1) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
✔ WelcomePageCept: Perform actions and see result (0.7s)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Unit Tests (0) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Time: 748 ms, Memory: 18.00MB
OK (1 test, 1 assertion)
一番初めのテストはOKになりました。
とりあえずここまで。