我有一个需要 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()
辅助函数引用的内容,但我没有成功地做到这一点。
最佳答案
当您使用url()->full();
时,这将返回当前请求的完整URL,而不是配置中设置的URL。所以当使用这个时:
config(['app.url' => 'http://test.test?myNewParam=5']);
然后你可以得到这样的值:config('app.url')
。
如果您想通过 url
帮助器获取参数,那么您需要向使用您的服务的 Controller 路由发出请求,例如:
$this->get('/test?myNewParam=5')->assert...
但这就不是单元测试了。您应该更好地从服务方法中移出 url
辅助函数的使用,并将其作为服务的依赖项提供。这样,您就可以将一个 URL 用于生产代码,将另一个 URL 用于测试代码。
关于php - 如何更改单元测试的应用程序 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56468053/