私はLaravel 5.2を使用して作成したAPIエンドポイントにPOSTデータをテストしていますが、テストでアプリケーションに到達しているパラメータはありません。エンドポイントはjsonを想定し、jsonで応答し、アクティブおよびメイクパラメータの規則を必要とするFormRequestValidatorを使用します。テストは状態コードで失敗し、応答ボディを調べると、要求がフォーム要求検証器、入力に到達したときに何らかの理由で呼び出されても、アクティブおよびmakeパラメータが必要であることが示されますそこにいない。Laravel 5.2 PHPUnit JSON Apiリクエストボディが設定されていません
しかし、Postmanからのmakeとactiveを含むJSON本体を持つエンドポイントを呼び出すか、または私たちが構築したUIアプリケーションはうまく動作しますが、PHPUnitテストでは失敗しているだけなので、PHPUnitまたはテストセットアップが間違っています。ここにテストがあります:
public function testItStoresCars()
{
// Arrange
$user = User::first();
//Act
$this->json(Request::METHOD_POST, '/v1/cars', [
'active' => true,
'make' => 'Audi'
],
['Authorization' => 'Bearer '.\JWT::fromUser($user)]));
// Assert
$this->assertResponseOk();
}
私は、認証ヘッダーが他のテストの合格から正しく設定されていることを知っています。
私は、ミドルウェアを無効$this->post
ヘルパーメソッドを使用して、手動でのヘッダーを設定するだけでなく、ヘッダを設定すると$this->call
方法を使用してjson_encode
を使用してデータを符号化するが、私はいつも同じ422応答を取得しようとしました。この問題が発生した人は誰ですか?またはエラーが表示されるのでしょうか?
コントローラコード
public function store(CreateCarRequest $request)
{
$car = $this->carRepo->save($request->all());
return response()->json(car);
}
FormRequest
class CreateCarRequest extends Request
{
public function rules()
{
return [
'active' => 'required|boolean',
'make' => 'required',
];
}
}
$ user = User :: first(); $ this-> actingAs($ user); ます$ this-> JSON( 'POST'、 '/ VI1 /車'、[ 'アクティブ' =>真、 '作る' => 'アウディ ]) - > assertResponseOk() は、それを入れてみてくださいこの方法で、失敗し続ける場合は、インスペクタの[ネットワーク]タブをチェックして、要求、応答、またはプレビューを探します。 –
私が質問に記載したように、それはブラウザではUIアプリやPostmanでうまく動作します。したがって、ネットワークのタブとインスペクタは問題について何も明らかにしません。 PHPUnitテストの問題と、パラメータが失われているか設定されていないために、検証が失敗し、422が返されます(検証が失敗したときに期待どおり) – ExoticChimp
コントローラのアクションコードとその要求に対する検証ルールを指定してください。 –