如何在 Laravel PHPUnit 测试中获取响应变量?

Posted

技术标签:

【中文标题】如何在 Laravel PHPUnit 测试中获取响应变量?【英文标题】:How to get Response variables in a Laravel PHPUnit test? 【发布时间】:2017-08-04 00:05:37 【问题描述】:

我正在测试一个控制器方法,并且我正在测试中访问一个路由。

然后我想确保在视图中返回了正确的模型并加载了所有正确的关系。

我知道我可以做到:

$this->assertViewHas("content");

但是如何验证返回到视图中的内容模型是否正确,例如类别?即我怎样才能获得内容模型对象,然后做类似的事情

$this->assertEquals($content->category->name, "category 1");

?

【问题讨论】:

为什么不抓取实际的控制器方法并测试以确保它具有正确的信息? 即使我抓住了实际的控制器,它也会返回一个视图。如何从视图访问内容模型对象?我想这可以解决我的问题,但我不知道答案。 检查source code,看来您可以使用->assertViewHas($key, $value)之类的东西。 @CalebAnthony 是的,我已经看到了,但也许我很困惑。我知道我可以做->assertViewHas('content', $value),但我想做的是->assertViewHas('content->category', $value),这会返回null(我认为是因为尝试访问视图的“内容”属性会返回一个雄辩的对象而不是模型。我不太确定。或者因为视图没有'content->category'属性。但无论如何,我无法让它做我想做的事。 How to get view data during unit testing in Laravel的可能重复 【参考方案1】:

您可以像这样从响应中获取您的内容:

$content = $response->getOriginalContent()->getData()['content'];

getData()将发送到视图的数据作为数组返回。

【讨论】:

【参考方案2】:

使用assertSee():

$response->assertSee("category 1");

【讨论】:

【参考方案3】:

您可以使用以下方法获取传递给视图的数组:

$response->original->getData()

这来自 Illuminate/Http/ResponseTrait (link to docs)。

【讨论】:

这只是 Vito Meuli 2017 年答案的属性快捷方式。 是的,我觉得它读起来更干净,所以想与社区分享【参考方案4】:

你可以使用

$your_desired_data = $response->assertSee('var_tag');

如果它是一个数据数组,您可以通过以下方式访问其数据:

$first_name = $your_desired_data['first_name'];

【讨论】:

以上是关于如何在 Laravel PHPUnit 测试中获取响应变量?的主要内容,如果未能解决你的问题,请参考以下文章

看不到响应获取请求 laravel phpunit

如何在 laravel 5.5 中使用 phpunit 测试中间件?

如何使用phpunit在具有动态URI的laravel中测试REST api

如何使用 PHPUnit 在 Laravel 上测试更复杂的案例

如何使用 phpunit 在 Laravel 4 中测试命名空间对象

如何使用 API 中间件在 Laravel 中测试 PHPUnit 一个经过身份验证的用户?