繁体   English   中英

如何在Laravel中使用助手功能对测试视图进行单元化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM