(laravel)提供模拟数据以便在测试时查看?

时间:2016-05-25 20:09:04

标签: php laravel-5 phpunit

假设我有一个刀片模板:

// 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');

但该测试失败了。如何从我的测试中将自己的数据传递给视图?

1 个答案:

答案 0 :(得分:0)

最后用Google搜索了足够的解决方法:

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

很酷的事情(取决于你在测试时的独立程度)是,如果我的FooController传递了其他变量,但我只在测试的视图作曲中覆盖其中一个,另一个非-overridden值仍然存在。