我正在使用laravel 4并试图通过模拟传递一些假数据的业务逻辑来为控制器编写测试。 然后,由于缺少变量,我在渲染视图中遇到错误。
首先,我没想到会呈现视图,所以我不想传递所需的确切数据结构。 我应该将正确的数据结构传递给视图还是有办法在测试中停止渲染视图?哪种更好的做法以及为什么?
此外,在尝试模仿通过业务逻辑传递的数据结构之后,仍然存在由用户许可的错误原因。 视图的结果临时文件已由Web用户(www-data)生成,我无权修改它。 我知道,我可以只是chmod 777,但这显然不是一个好习惯,如果我每次想要进行测试都必须这样做。
提前致谢
答案 0 :(得分:0)
我想你的控制器没有弄乱。每个逻辑都应该通过构造函数注入或从IOC解析。模拟外部类并绑定测试setUp上的模拟实例。外墙已经支持Mockery。您可以使用XXX :: shouldReceive()。
另外,我建议你看一下Illuminate \ Foundation \ Testing \ TestCase。它有辅助方法,如assertViewHas,assertSessionHas,assertRedirectedTo等。有了这些,测试你的控制器将非常容易。
毕竟,为你做的最好的事情就是阅读" Laravel Testing Decoded"作者:Jeffrey Way。它是一本简短而精彩的书。 https://leanpub.com/laravel-testing-decoded
答案 1 :(得分:0)
我在测试时遇到了类似的问题。在我的情况下,它是一个foreach循环,没有得到正确的结构,所以我改变我的模拟返回一个空数组,这使测试通过。所以这是一个可能的解决方案,我认为,虽然它不会模拟或只是忘记渲染视图本身。