【问题标题】:Laravel test if the response contains errors?Laravel 测试响应是否包含错误?
【发布时间】:2021-04-08 16:50:39
【问题描述】:

我正在处理遗留代码并尝试使用测试来覆盖代码以供以后重构。在一个控制器中,有一段代码是这样的:

return redirect()->route('login')->withErrors(['invalid credentials']);

这是我对测试的断言:

$response->assertRedirect(route('login'));
$response->assertSessionHasErrors([
    0 => 'invalid credentials'
]);

但问题是我得到以下输出:

Session missing error: 'invalid credentials'
Failed asserting that false is true.

知道如何完成这项工作吗?

【问题讨论】:

    标签: php laravel testing phpunit


    【解决方案1】:

    查看assertSessionHasErrors()的源代码我认为用你的用例是做不到的。问题是您的 withErrors(...) 方法中的未命名数组。我看到了两个选项:

    • 将您的旧应用程序更改为:
    return redirect()->route('login')->withErrors(['error' => 'invalid credentials']);
    

    之后你可以像这样运行你的测试:

    $response->assertRedirect(route('login'));    
    $response->assertSessionHasErrors([
        'error' => 'invalid credentials'
    ]);
    
    • 如果您无法更改旧版应用程序,您可以使用此:
    $response->assertRedirect(route('login'));    
    $this->assertEquals(session('errors')->getBag('default')->first(),'invalid credentials');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 2021-10-30
      • 2023-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      相关资源
      最近更新 更多