[英]How to unit test views with helper functions in laravel
我有这些测试用例访问url并检查正确的行为,但是我无法使其工作,因为它在视图中的辅助函数上出错。
它适用于浏览器,但不适用于测试。
/** @test */
public function setUp()
{
parent::setUp();
}
/** @test **/
public function openAdminDashboardUnauthorized()
{
$crawler = $this->client->request('GET', 'admin/organizations');
$this->assertTrue($this->client->getResponse()->isOk());
}
/** @test **/
public function tearDown()
{
parent::tearDown();
}
继承人的错误
编辑我的助手类是通过laravel 4.2在classLoader中的global.php中加载的
更新
人们说您必须模拟助手功能才能对其进行单元测试。 但是在我的情况下,辅助函数在视图中,并且我测试了从设置函数中转储静态消息的过程,并且实际上在测试运行期间未加载该消息。
所以这就是我发现的工作。
将我的帮助器类加载到composer.json自动加载子树中
并运行快速的“ composer dump-autoload”
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
],
"files": [
"app/helper/Helper.php"
]
}
现在,我知道在global.php中加载类和通过composer自动加载之间的区别。 如果有人能解释有关laravel启动应用程序的顺序的更多信息,我会接受。
使用Mockery,默认情况下laravel4.2拥有它。 请参阅https://laravel.com/docs/4.2/testing您应该在顶部有类似的内容。
use Mockery as m;
class ClassToTest
{
public function test_some_method()
{
// Mock view helper
$viewHelperMock = m::mock(ViewHelper::class);
// Set expectations
$viewHelperMock->shouldReceive('show');
...
// This must be done only after setting the expectations
$this->app->instance(ViewHelper::class, $viewHelperMock);
...
// Your assertions goes here
}
}
我们将自己的viewHelperMock
实例绑定到Laravel的DI容器。 因此,无论何时发出ViewHelper类请求,它都会解析为我们的模拟实例。 因此,现在您可以为视图帮助器中调用的所有方法设置期望值。
如果您向我们展示您的视图(html)代码,则指导您的过程将更加容易。 不要生气,一开始它很棘手和令人困惑。 因此,请尝试多次,并查看Laravel的IOC容器如何工作。
如果您有任何疑问,请告诉我们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.