0

我正在使用 laravel 4 并尝试为控制器编写一个测试,其中包含传递一些假数据的业务逻辑模型。然后由于缺少变量,我在渲染视图中遇到错误。

首先,我没想到视图会被渲染,所以我没有在意传递所需的确切数据结构。我应该将正确的数据结构传递给视图还是有办法阻止视图在测试中呈现?哪个是更好的做法,为什么?

而且,在试图模仿业务逻辑传递的数据结构后,仍然存在用户权限导致的错误。视图的结果临时文件已由 Web 用户 (www-data) 生成,我无权修改它。我知道,我可以只 chmod 777,但这显然不是一个好习惯,如果我每次想要运行测试时都必须这样做。

提前致谢

4

2 回答 2

0

我在测试时遇到了类似的问题。在我的情况下,它是一个 foreach 循环,没有得到正确的结构,所以我更改了我的模拟以返回一个空数组,这使得测试通过。所以我认为这对你来说是一个可能的解决方案,尽管它不会模拟或只是忘记渲染视图本身。

于 2013-12-01T17:11:37.483 回答
0

我想你的控制器没有搞砸。每个逻辑都应该通过构造函数注入或从 IOC 解析。在您的测试集上模拟外部类并绑定模拟实例。Facades 已经支持 Mockery。您可以使用 XXX::shouldReceive()。

另外,我建议你看看 Illuminate\Foundation\Testing\TestCase。它有 assertViewHas、assertSessionHas、assertRedirectedTo 等辅助方法。有了这些,测试你的控制器将非常容易。

毕竟,最好的办法是阅读 Jeffrey Way 的“Laravel 测试解码”。这是一本简短而神奇的书。https://leanpub.com/laravel-testing-decoded

于 2013-11-14T14:17:47.477 回答