phpunit测试返回302进行错误验证,为什么不进行422验证

cre*_*re8 14 php phpunit laravel laravel-5.2

我有一个请求类失败的发布请求.当我用ajax调用它时,我得到422,因为验证规则失败了.但是当我使用phpunit测试具有相同值的相同路由时,它返回302.

我也没有得到像"只需要字段foobar"的错误消息302.

那么如何获取错误消息以检查它们是否相等?

这是我的测试代码:

//post exam
$this->post('modul/foo/exam', [
    'date' => '2016-01-01'
])
    ->assertResponseStatus(200);

//post exam again
$this->post('modul/foo/exam', [
    'date' => '2016-01-01'
])
    ->assertResponseStatus(302); //need to get 422 with th errors because its an api
Run Code Online (Sandbox Code Playgroud)

pat*_*cus 27

当验证FormRequest失败时,它会检查请求是否为ajax或是否接受json响应.如果是这样,它将返回带有422状态代码的json响应.如果没有,它将返回重定向到指定的URL(默认情况下为前一个).因此,为了获得您正在寻找的失败响应(422),您需要发出json请求或ajax请求.

JSON

要发出json请求,您应该使用以下json()方法:

//post exam
$this->json('POST', 'modul/foo/exam', [
        'date' => '2016-01-01'
    ])
    ->assertResponseStatus(200);

//post exam again
$this->json('POST', 'modul/foo/exam', [
        'date' => 'some invalid date'
    ])
    ->assertResponseStatus(422);
Run Code Online (Sandbox Code Playgroud)

AJAX

要发出ajax请求,您需要添加ajax标头.为此,您可以继续使用该post()方法:

//post exam
$this->post(, 'modul/foo/exam', [
        'date' => '2016-01-01'
    ], ['HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'])
    ->assertResponseStatus(200);

//post exam again
$this->post('modul/foo/exam', [
        'date' => 'some invalid date'
    ], ['HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'])
    ->assertResponseStatus(422);
Run Code Online (Sandbox Code Playgroud)