【发布时间】:2017-06-11 21:57:38
【问题描述】:
在 Laravel 中测试路由时,我似乎无法同时断言返回的响应和会话。这有什么原因吗?我应该将测试分成两部分吗?
这是我的简化测试:
$response = $this->call('POST', route('some-route'), $data);
通过了:
$this->assertResponseStatus(302);
这没有通过:
$this
->assertResponseStatus(302)
->assertSessionHasErrors([
'application_status' => 'Application status has changed. Action not applied.'
]);
测试会抛出一个错误,说它不能针对 null 断言。
我尝试移动测试轮次的顺序,并在断言之前将响应和会话分配给变量:
$response = $this->call('POST', route('admin.application.action.store'), $data);
$sessionErrors = session()->get('errors');
$this
->assertEquals(302, $response->status())
->assertTrue($sessionErrors->has('application_status'));
但仍然遇到同样的问题。 Error: Call to a member function assertTrue() on null
任何建议将不胜感激。谢谢!
【问题讨论】: