Laravel 测试响应是否包含错误?
Laravel test if the response contains errors?
我正在处理遗留代码并尝试使用测试来覆盖代码以供以后重构。在一个控制器中有这样一段代码:
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.
知道如何完成这项工作吗?
查看 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');
我正在处理遗留代码并尝试使用测试来覆盖代码以供以后重构。在一个控制器中有这样一段代码:
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.
知道如何完成这项工作吗?
查看 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');