Laravel5.0での話。
現在の5.2では改善されているのかもしれない。
(2018年追記:Laravel5.6時点では.env.testing
を作成すればそちらが優先的に使用される)
マニュアルを見ると自動的にtesting環境に切り替えると書いてあるが、
何も変わっている様子が見られないしそもそも設定方法が書かれていない。
仕方がないので色々調べてやってみた。
正しいのかも分からないがとりあえず動く方法。
SQLiteが使える環境だったのでSQLiteを使用した。
storageフォルダにtesting.sqliteファイルを作成。
config/database.phpのconnectionsに接続設定を追加。
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => storage_path().'/testing.sqlite',
'prefix' => '',
],
接続設定を動的に切り替えるため、defaultの設定も書き換える。
'default' => env('DB_DEFAULT', 'mysql'),
切り替えるための設定ファイルを作成。
このファイルを作成してもテスト時に自動的に切り替わったりはしない。
異なるところは下記あたり。
APP_ENV=testing
APP_DEBUG=true
DB_DEFAULT=sqlite_testing
bootstrap/app.phpのreturn前に下記を追加。
$environment = $app->detectEnvironment(function()
{
return env('APP_ENV', 'production');
});
if ($environment == 'testing') {
$app->loadEnvironmentFrom('.env.testing');
}
DatabaseSeederのrunメソッドに、テスト用の分岐処理を追加。
public function run()
{
Model::unguard();
$this->call('AdminTableSeeder');
if (app()->environment() == 'testing') {
$this->call('TestProductTableSeeder');
}
}
tests/TestCase.phpにsetUpメソッドを追加。
public function setUp() {
parent::setUp();
Artisan::call('migrate:refresh');
Artisan::call('db:seed');
}
あとは
vendor/bin/phpunit
正しく動くまでは
DBはバックアップしておいた方が良い。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント