具有Laravel后端端到端测试的Vue SPA

时间:2020-05-11 10:17:04

标签: laravel testing integration-testing

我有两个独立的项目,一个Vue SPA和一个Laravel后端。

现在,我想编写一些从Vue SPA到Laravel后端的端到端测试。我想编写进行真正的后端API调用的SPA测试。但是Laravel API应该知道这是测试调用,并且像使用phpunit运行测试一样处理它们。因此,此调用应使用.env.testing或phpunit.xml env设置,例如使用测试数据库和测试邮件提供程序。

那么有可能告诉Laravel,它应该使用env = testing处理请求吗?

我找到了一个古老的article from Mohamed Said,它朝着这个方向移动并设置了cookie。但我希望有一种更简便的方法,尤其是在加载整个.env.testing变量时?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我找到了一个可行的解决方案: 我创建一个带有特殊nginx参数的新子域:

fastcgi_param TESTING_DOMAIN TRUE;

在Laravel Homestead中,可以在Homestead.yaml中轻松完成此操作:

    -   map: testing.mydomain.test
        to: /home/vagrant/code/mydomain/public
        schedule: true
        backup: false
        php: "7.4"
        params:
            - key: TESTING_DOMAIN
              value: "TRUE"

然后在Laravel中,我将其添加到bootstrap / app.php中:

/*
|--------------------------------------------------------------------------
| Loading environment
|--------------------------------------------------------------------------
|
| This is project specific, loading .env.testing on testing domains, if:
| fastcgi_param TESTING_DOMAIN TRUE;
|
*/
if ($_SERVER["TESTING_DOMAIN"] ?? null) {
    $app->loadEnvironmentFrom('.env.testing');
}

然后我可以打电话给testing.mydomain.test,它可以正常工作:

ddd(\App::environment()); // => "testing" - from .env.testing

我现在从.env.testing中获取了所有环境变量。