【问题标题】:Laravel testing assertions against session and responseLaravel 针对会话和响应测试断言
【发布时间】: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

任何建议将不胜感激。谢谢!

【问题讨论】:

    标签: php laravel phpunit


    【解决方案1】:

    断言不实现流体接口。将其作为 2 个顺序语句运行:

    $this->assertResponseStatus(302);
    $this->assertSessionHasErrors([
        'application_status' => 'Application status has changed. Action not applied.'
    ]);
    

    【讨论】:

    • 非常感谢!在那个上花了很长时间哈哈。测试现已通过。
    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2020-06-06
    • 2020-06-13
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多