質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

Q&A

解決済

1回答

1459閲覧

PHPUnitを実行するたびに結果が変わってしまう

poteto4401

総合スコア57

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

0グッド

0クリップ

投稿2020/04/28 07:48

編集2020/04/28 08:34

現象

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で生成した値がフォームリクエストバリデーションに引っかかっているのではないか、といったところです。
こちらは現在調査中です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

バリデーションのアフターフックを利用して、確認したところ、fakerで生成した文字列がバリデーションのMAX文字列数をオーバーしていたのが原因でした。

public function withValidator($validator) { $validator->after(function ($validator) { if ($this->somethingElseIsInvalid()) { $validator->errors()->add('field', 'Something is wrong with this field!'); } }); }

https://readouble.com/laravel/7.x/ja/validation.html

投稿2020/04/28 09:16

poteto4401

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問