現象
1回目のテストの実行と2回目のテストの実行では、結果が変わってしまう。
vagrant@me:~/code$ phpunit tests/Feature/ItemTest PHPUnit 9.1.2 by Sebastian Bergmann and contributors. ..F.......F..F 14 / 14 (100%) Time: 00:02.699, Memory: 34.00 MB There were 3 failures: // ...
vagrant@me:~/code$ phpunit tests/Feature/ItemTest PHPUnit 9.1.2 by Sebastian Bergmann and contributors. ...F....F.F..F 14 / 14 (100%) Time: 00:02.562, Memory: 34.00 MB There were 4 failures: // ...
環境
- Laravel 7.x
- Homestead
- sqlite(テスト時のみ)
- phpunit 9.1.2
ソースコード
php
1trait CreatesApplication 2{ 3 public function createApplication() 4 { 5 $app = require __DIR__.'/../bootstrap/app.php'; 6 $app->make(Kernel::class)->bootstrap(); 7 8 if ($app->environment() !== 'testing') { 9 $this->clearCache(); 10 11 $app = require __DIR__.'/../bootstrap/app.php'; 12 $app->make(Kernel::class)->bootstrap(); 13 } 14 15 return $app; 16 } 17 18 protected function clearCache() 19 { 20 $commands = ['clear-compiled', 'cache:clear', 'view:clear', 'config:clear', 'route:clear']; 21 foreach ($commands as $command) { 22 Artisan::call($command); // テスト実行時にキャッシュされた設定(env == local等)が反映されないようにするため 23 } 24 } 25}
php
1abstract class TestCase extends BaseTestCase 2{ 3 use CreatesApplication; 4 5 protected function setUp(): void 6 { 7 parent::setUp(); 8 9 $this->seed(SampleSeeder::class); 10 $this->withoutMiddleware(VerifyCsrfToken::class); // 419エラー回避のため 11 } 12 13 protected function tearDown(): void 14 { 15 parent::tearDown(); 16 } 17}
php
1class ItemTest extends TestCase 2{ 3 use RefreshDatabase; 4 5 /** @test */ 6 public function 追加画面() 7 { 8 $this->actingAs($this->admin) 9 ->get(route('admin.item.create')) 10 ->assertStatus(200); 11 } 12 13 /** @test */ 14 public function 編集画面() 15 { 16 $item = factory(Item::class)->create(); 17 18 $this->actingAs($this->admin) 19 ->get(route('admin.item.edit', $item)) 20 ->assertStatus(200) 21 ->assertSee($tag->name) 22 ->assertSee($tag->slug); 23 } 24 25 /** @test */ 26 public function データの追加() 27 { 28 $data = [ 29 'name' => $this->faker->word(), 30 'slug' => $this->faker->unique()->slug(), 31 ]; 32 33 $this->actingAs($this->admin) 34 ->post(route('admin.item.store', $data)) 35 ->assertStatus(302) 36 ->assertRedirect(route('admin.item.create')); 37 $this->assertDatabaseHas('items', $data); 38 } 39 40 // ...
テスト内容は一部です。
他にも必要な情報があればコメントいただけると幸いです。
エラーが出ているわけではないので、どこが原因なのか全くわからないです。
なにかのキャッシュが残ったままなのでしょうか??
ご回答よろしくおねがいします。
追記
ひとつ思い当たる箇所があり、fakerで生成した値がフォームリクエストバリデーションに引っかかっているのではないか、といったところです。
こちらは現在調査中です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。