0

config('app_settings.url')我正在创建一个包,它提供一个配置文件来自定义它将添加的路由 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 的选项。

4

1 回答 1

1

老实说,我认为不可能进行这样的测试。我尝试过使用一些“hacky”解决方案,但也失败了。

问题是,当您开始此类测试时,所有路由都已加载,因此更改配置中的值不会影响当前路由。

编辑

作为替代解决方案,为了使它有点可测试,在配置中我会使用:

<?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在路由中使用,并且使用自定义 envphpunit.xml会给您一些信心,只有自定义 url 可以正常工作;

于 2018-09-25T16:10:35.530 回答