我有一个需要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()
辅助函数引用了该请求,但是我没有成功地做到这一点。
答案 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
辅助函数的用法,并将其作为对服务的依赖。这样,您可以将一个网址用于生产代码,将另一个网址用于测试代码。