如何更改用于单元测试的应用程序URL?

时间:2019-06-05 21:09:05

标签: php laravel laravel-5 phpunit

我有一个需要url才能工作的功能。我正在尝试对其进行单元测试,因为它的行为取决于url查询参数。

MyServiceTest.php

function testMyTestFunction() {
    $service = new MyService();

    // Some how change the url for the app. This doesn't work
    config(['app.url' => 'http://test.test?myNewParam=5']);

    $service->test();
}

MyService.php

function test() {
    // Does not contain `myNewParam`
    $url = url()->full();

    // do some logic
}

我还尝试了模拟请求,因为url()辅助函数引用了该请求,但是我没有成功地做到这一点。

1 个答案:

答案 0 :(得分:3)

当您使用url()->full();时,它将返回当前请求的完整URL,而不是配置中设置的URL。所以当使用这个:

config(['app.url' => 'http://test.test?myNewParam=5']);

然后您将获得如下所示的值:config('app.url')

如果要通过url帮助器获取参数,则需要向使用您的服务的控制器路由发出请求,例如:

$this->get('/test?myNewParam=5')->assert...

,但是那将不是单元测试。您最好从服务方法中移出url辅助函数的用法,并将其作为对服务的依赖。这样,您可以将一个网址用于生产代码,将另一个网址用于测试代码。