我正在创建一个程序包,该程序包提供了一个配置文件以自定义要添加的路由网址,我可以在控制器中看到配置文件的值,但是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' => []
];
当我使用此软件包时,它可以工作,但是测试失败。
请帮助我如何提供从config更改路由网址的选项。
答案 0 :(得分:1)
说实话,我认为不可能进行这样的测试。我尝试使用一些“ hacky”解决方案,但也失败了。
问题是,当您开始进行此类测试时,所有路由都已加载,因此更改config中的值不会影响当前路由。
编辑
作为替代解决方案,使其在配置中可以测试,我将使用:
<?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
中使用自定义环境给您带来了一定的信心,只有自定义url可以正常工作;