【问题标题】:How to get Response variables in a Laravel PHPUnit test?如何在 Laravel PHPUnit 测试中获取响应变量?
【发布时间】: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'属性。但无论如何,我无法让它做我想做的事。

标签: php laravel phpunit laravel-testing


【解决方案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'];
      

      【讨论】:

        猜你喜欢
        • 2018-05-08
        • 2022-11-20
        • 2021-12-08
        • 2012-03-04
        • 2022-01-27
        • 2013-11-10
        • 1970-01-01
        • 2023-03-31
        • 2018-10-23
        相关资源
        最近更新 更多