我正在创建一个包,它提供了一个配置文件来自定义它将添加的路由url,我可以在控制器中看到配置文件值,但config('app_settings.url')
和null
在pakacge/src/routes/web.php
Route::get(config('app_settings.url'), 'SomeController')
我的测试也给出了404,并且app_settings
配置更改没有被路由选择。
function it_can_change_route_url_by_config() {
// this should be default url
$this->get('settings')
->assertStatus(200);
// change the route url
config()->set('app_settings.url', '/app_settings');
$this->get('app_settings')
->assertStatus(200);
$this->get('settings')
->assertStatus(400);
}
app_setting.php
return [
'url' => 'settings',
'middleware' => []
];
当我使用这个包时,它是有效的,但测试失败了。
请帮助我如何提供从配置更改路由url的选项。
老实说,我认为不可能进行这样的测试。我尝试过使用一些"破解"的解决方案,但也失败了。
问题是,当您开始这样的测试时,所有路由都已加载,因此更改配置中的值不会影响当前路由。
编辑
作为另一种解决方案,为了使其具有可测试性,我将在配置中使用:
<?php
return [
'url' => env('APP_SETTING_URL', 'settings'),
'middleware' => []
];
然后在phpunit.xml
中可以设置:
<env name="APP_SETTING_URL" value="dummy-url"/>
正如你所看到的,我在这里设置了完全的伪url,以确保这个自定义url稍后会被使用,然后测试可能看起来像这样:
/** @test */
function it_works_fine_with_custom_url()
{
$this->get('dummy-url')
->assertStatus(200);
$this->get('settings')
->assertStatus(404);
}
也许它并不能测试所有内容,但很难相信有人会在路由中使用dummy-url
,在phpunit.xml
中使用自定义env会让你有某种信心,只有自定义url才能正常工作;