如何在laravel 5中使用php单元测试验证错误

Use*_*456 5 php tdd phpunit unit-testing laravel-5

如何在验证错误中抛出的php单元中测试特定的验证错误?使用以下代码,我们可以检查会话是否有错误,但不是确切的错误

$this->assertSessionHasErrors();
Run Code Online (Sandbox Code Playgroud)

Gab*_*uso 8

assertSessionHasErrors可以接收一个数组,如下所示:

$this->assertSessionHasErrors([
    'field' => 'Field error message.'
]);
Run Code Online (Sandbox Code Playgroud)

  • 这里只使用按键。这不会测试错误消息,只是测试该字段是否有消息。 (2认同)
  • 我认为这在某一点上可能是正确的,但从 6.x 开始,除了字段/键本身之外,您**还可以**传递值来测试特定的错误消息。在 Laravel 文档中公关了这一点:https://laravel.com/docs/6.x/http-tests#assert-session-has-errors (2认同)

Use*_*456 5

得到了答案

    $errors = session('errors');
    $this->assertSessionHasErrors();
    $this->assertEquals($errors->get('name')[0],"Your error message for validation");
Run Code Online (Sandbox Code Playgroud)

$ errors是MessageBag对象,当使用$ errors-> get('name')引发验证错误时,它存储在laravel会话中,您可以将所有验证错误视为一个数组

  • 对于 Laravel 6.x(可能还有更早的版本),请检查 `assertSessionHasErrors`:https://laravel.com/docs/6.x/http-tests#assert-session-has-errors (2认同)

Fou*_*SSI 5

assertStatus您可以使用和的组合assertJson

...
->assertStatus(422)
->assertJson([
     'errors' => [
          'field' => [
               'Error message'  
          ]
      ]
]);
Run Code Online (Sandbox Code Playgroud)