动态路由url更改未反映在laravel包中



我正在创建一个包,它提供了一个配置文件来自定义它将添加的路由url,我可以在控制器中看到配置文件值,但config('app_settings.url')nullpakacge/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才能正常工作;

最新更新