【问题标题】:(laravel) supply mocked data to view when testing?(laravel)在测试时提供要查看的模拟数据?
【发布时间】:2016-05-25 20:09:04
【问题描述】:

假设我有一个刀片模板:

// resources/views/fragments/foo.blade.php
<p>{{ $foo }}</p>

(这显然是我的问题的一个非常精简的版本。我不明白为什么我需要测试一个简单的刀片模板。)在我的控制器中,我通常会像这样填充该模板:

// app/Http/Controllers/FooController.php
$parameters = ['foo' => ''];
return view('fragments.foo', $parameters);

问题是我想编写一个 phpunit 测试以确保当我将模板传递给 $foo 的特定值时成功呈现,但我不知道在运行时如何将数据发送到视图单元测试。我试过这个:

// tests/TestFooController.php
$this->withSession(['foo' => 'bar'])->visit('/foo')->assertViewHas('foo', 'bar');

但是那个测试失败了。如何在测试中将自己的数据传递给视图?

【问题讨论】:

    标签: php laravel-5 phpunit


    【解决方案1】:

    终于用谷歌搜索了足够多的解决方法:

    // tests/TestFooController.php
    $parameters = ['foo' => 'bar'];
    view()->composer('fragments.foo', function ($view) use ($parameters) {
        $view->with($parameters);
    });
    $this->visit('/foo')
        ->assertViewHasAll([
            'foo' => 'bar',
        ]);
    

    很酷的事情(取决于您在测试时喜欢多少独立性)是,如果我的 FooController 传递了其他变量,但我只在测试的视图作曲家中覆盖其中一个,其他未覆盖的值仍然是在那里。

    【讨论】:

      猜你喜欢
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 2010-09-10
      • 2018-10-20
      • 2018-07-28
      • 1970-01-01
      相关资源
      最近更新 更多