【问题标题】:Laravel: What is the best practice in testing controllerLaravel:测试控制器的最佳实践是什么
【发布时间】:2013-11-14 03:46:14
【问题描述】:

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

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

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

提前致谢

【问题讨论】:

  • 我还没有尝试过测试,但我假设你可以尝试一个没有 View::make() 的 echo 语句或 dd() 函数。然后进入终端并输入 curl yourdomain.com/my/path.. 以获得结果。还有“php artisan tinker”我认为它提供了正在发生的事情的信息。看看吧。

标签: php unit-testing view controller laravel-4


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回复,但我对模型没有问题。也许我不是很清楚。我想以某种方式在测试环境中停止呈现视图,这是否是一种好习惯?
  • 另外,在我断言之前,没有修改视图文件的权限(视图不是刀片的结果),由于权限问题而出现错误,因为这些文件是由 www-data 用户生成的.
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-09-24
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多