sql >> データベース >  >> RDS >> Mysql

データベースlaravel7.xのテストに関する問題

    まず第一に、あなたが問題を解決するのを手伝ってくれることを願っています。あなたが接続のどこかで犯しているのはばかげた間違いだと私は確信しています。

    だから、ここにいくつかのヒントがあります:

    コアフレームワークコードを「呼び出す」コードをテストしないでください...

    (ユニットテスト)を行う代わりに:

    $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);
    

    このようにして、次のことを確認できます。

    1. あなたのURLは、タイプミスやエラーがなく、必要なURLです
    2. コントローラーは想定どおりの動作をしており、この場合はデータを挿入しています。
    3. コントローラーは、挿入するデータを挿入しています。カーテンの後ろで処理を行っているとしましょう。ここでは、「1と3」を送信し、「ロールX」を挿入したことを確認できます(これは例です。たとえば、1と3を処理した後の望ましい結果になるとしましょう。 1 and 3を直接挿入していません )
    4. 常に避けてください テストしている場所からデータをアサートします。あなたの場合、Requestを使用しています オブジェクト、それがカスタムクラスであり、$request->attribute1 = 2を実行すると何かを実行するとします。 、したがって、$request->attribute1として読み戻すと 多分あなたはそれを保存するためにいくつかのプロセスを実行し、それを変更しました...あなたがassert that attribute1 is what I expect あなたはそれを主張することはありません。コードに誤りがあり、bを返す代わりに (1 =a2 =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のphpunit.xml が表示された場合 、<env>が変更されたことがわかります <server>へ 5.7以降では、お使いのバージョンに対応するものに固執してください。今は思い出せないのですが違いはありますが、テストは問題ありません。

    したがって、正しいDB_HOSTを設定していることを確認してください 、DB_PORTDB_USERNAME およびDB_PASSWORD 。ホストが同じでポートが異なる場合もあれば、ホストとポートが同じでデータベース名が異なるがユーザー名とパスワードが同じである場合もあります。したがって、正しいデータベースに接続していることを確認してください。

    エラーは目的のテーブルが見つからないことであるため、明らかにデータベースに接続しているため、ユーザー名とパスワードは問題になりませんが、テーブルは存在しません。

    最後に重要なことは、テストで何らかの特性を使用していますか?データベースを自動的に移行し、終了時にロールバックする特性がいくつかあるため、テスト環境で移行を手動で同期する必要はありません。 use RefreshDatabase;を使用する必要があります そうするための特性。

    最後のヒントとして、DEF_SOMETHINGを実行しないようにしてください 理由:

    1. コントローラーがDefiに関連している場合 、「これはDEFデータです」と言う必要はありません。すでにわかっているので、somethingを直接実行できます。 。テーブル名がcarsの場合、データベースについても同じです。 、car_wheelsの実行は避けてください 、car_doors 、など、wheelsを実行します 、doors 、など
    2. X_Yの実行は避けてください 、x_yを実行することをお勧めします 、データベースについても同じです。常に小文字に固執し、データベースの場合はsnake_caseに固執します 、ただし、モデルの属性については、常にcamelCaseに固執します 。 (詳細 ケースについて)



    1. MySQLに保存するためにIPv6をバイナリから変換する方法

    2. MySQLWorkbenchをAmazonRDSに接続する方法は?

    3. Rails-カスタム名の関連付けでjoinを使用する

    4. Postgresql:日付形式とローカル言語の出力