假设我有一个刀片模板:
// 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');
但该测试失败了。如何从我的测试中将自己的数据传递给视图?
答案 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值仍然存在。