まず第一に、あなたが問題を解決するのを手伝ってくれることを願っています。あなたが接続のどこかで犯しているのはばかげた間違いだと私は確信しています。
だから、ここにいくつかのヒントがあります:
コアフレームワークコードを「呼び出す」コードをテストしないでください...
(ユニットテスト)を行う代わりに:
$request = new Request();
$request->DEF_NOM = 'test';
$request->DEF_DESCRIPTION = 'testdescriptio ajhsg ln';
$request->DEF_NBSEMAINES = 2;
$request->DEF_CONSEILS = 'jhasnciu launh sl';
$request->DEF_VISIBLE = 1;
$request->DEF_DATE_VISIBLE = Carbon::now()->toDate();
$request->COA_ID = 3;
$dfc = new DefiCoachController();
$response = $dfc->createDefiTest($request);
$this->assertDatabaseHas('cbs_defis', $request->all());
実行(機能テスト):
$data = [
'nom' => 'test',
'description' => 'testdescriptio ajhsg ln',
'nbsemaines' => 2,
'conseils' => 'jhasnciu launh sl',
'visible' => 1,
'date_visible' => Carbon::now()->toDate(),
'coa_id' => 3,
];
$response = $this->post('your_desired_url_for_this_action', $data); // This can be get, post, put or delete
$this->assertDatabaseHas('cbs_defis', $data);
このようにして、次のことを確認できます。
- あなたのURLは、タイプミスやエラーがなく、必要なURLです
- コントローラーは想定どおりの動作をしており、この場合はデータを挿入しています。
- コントローラーは、挿入するデータを挿入しています。カーテンの後ろで処理を行っているとしましょう。ここでは、「1と3」を送信し、「ロールX」を挿入したことを確認できます(これは例です。たとえば、1と3を処理した後の望ましい結果になるとしましょう。
1 and 3
を直接挿入していません ) - 常に避けてください テストしている場所からデータをアサートします。あなたの場合、
Request
を使用しています オブジェクト、それがカスタムクラスであり、$request->attribute1 = 2
を実行すると何かを実行するとします。 、したがって、$request->attribute1
として読み戻すと 多分あなたはそれを保存するためにいくつかのプロセスを実行し、それを変更しました...あなたがassert that attribute1 is what I expect
あなたはそれを主張することはありません。コードに誤りがあり、b
を返す代わりに (1
=a
、2
=b
、など)コードは予想とは異なるものとして保存されているため、常に渡されますが、コードが実行したことを主張しています(たとえば、間違いがc
を返したとします。b
の代わりに )つまり、「$request->attribute1
を検索」と言っているのです。 データベースに」と入力すると、c
が保存されます。b
の代わりに (期待値)それでもそれを見つけてテストに合格します。
新しいconnection
を作成する必要はありません DB_DATABASE
以外は同じ場合 または類似。その場合は、その情報を.env.testing
で定義するだけです。 またはphpunit.xml
。
また、<server name="DB_CONNECTION" value="testing"/>
を実行する必要はありません。 および<env name="DB_CONNECTION" value="testing"/>
。 LaravelGitHubの<env>
が変更されたことがわかります <server>
へ 5.7以降では、お使いのバージョンに対応するものに固執してください。今は思い出せないのですが違いはありますが、テストは問題ありません。
したがって、正しいDB_HOST
を設定していることを確認してください 、DB_PORT
、DB_USERNAME
およびDB_PASSWORD
。ホストが同じでポートが異なる場合もあれば、ホストとポートが同じでデータベース名が異なるがユーザー名とパスワードが同じである場合もあります。したがって、正しいデータベースに接続していることを確認してください。
エラーは目的のテーブルが見つからないことであるため、明らかにデータベースに接続しているため、ユーザー名とパスワードは問題になりませんが、テーブルは存在しません。
最後に重要なことは、テストで何らかの特性を使用していますか?データベースを自動的に移行し、終了時にロールバックする特性がいくつかあるため、テスト環境で移行を手動で同期する必要はありません。 use RefreshDatabase;
を使用する必要があります そうするための特性。
最後のヒントとして、DEF_SOMETHING
を実行しないようにしてください 理由:
- コントローラーが
Defi
に関連している場合 、「これはDEFデータです」と言う必要はありません。すでにわかっているので、something
を直接実行できます。 。テーブル名がcars
の場合、データベースについても同じです。 、car_wheels
の実行は避けてください 、car_doors
、など、wheels
を実行します 、doors
、など -
X_Y
の実行は避けてください 、x_y
を実行することをお勧めします 、データベースについても同じです。常に小文字に固執し、データベースの場合はsnake_case
に固執します 、ただし、モデルの属性については、常にcamelCase
に固執します 。 (詳細a> ケースについて)