gpt4 book ai didi

laravel - 如何使用 Laravel Localization 进行单元测试?

转载 作者:行者123 更新时间:2023-12-02 10:08:29 24 4
gpt4 key购买 nike

我正在使用 mcamara/laravel-localization 包,但我不知道如何让它与我的单元测试一起工作。以下两项均失败并显示红色:

// 1. This one results in "Redirecting to http://myapp.dev/en"
$this->get('/')->assertSee('My App Homepage');

// 2. This one results in 404
$this->get('/en')->assertSee('My App Homepage');

在浏览器中,http://myapp.dev 返回 302 并重定向到 http://myapp.dev/en,这很公平。但是,http://myapp.dev/en 返回 200。因此这两种情况在前端都可以 100% 正常工作,但在单元测试中则不然。

但是,我确实进行了一些自定义,这再次在浏览器中发挥了作用。

// in web.php
Route::group([
'prefix' => app('PREFIX'), // instead of LaravelLocalization::setLocale()
'middleware' => ['localeSessionRedirect', 'localizationRedirect']],
function() {
Route::get('/', function() {
return view('home');
});
}
]);

// in AppServiceProvider.php
public function boot()
{
// This, unlike LaravelLocalization::setLocale(), will determine the
// language based on URL, rather than cookie, session or other
$prefix = request()->segment(1); // expects 'en' or 'fr'
$this->app->singleton('PREFIX', function($app) use ($prefix) {
return in_array($prefix, ['en', 'fr']) ? $prefix : null;
});
}

希望这段代码对您有意义。谢谢!

更新

我用GitHub issue #435中的包解决了这个问题。 .

更新2

据我所知,只要您在 phpunit XML 文件的基本 URL 中指定区域设置,您似乎就可以安全地测试本地化路由:

<env name="APP_URL" value="http://myapp.dev/en"/>

但是,这适用于本地化的 GET 端点(以区域设置前缀开头,例如“en”),但不适用于非本地化的 POST、PUT 等(没有任何前缀)。因此,您无法真正同时测试两种端点,除非您使用 Dusk(我不使用 Dusk,因为它太过分了,而且速度慢得多,几乎与手动执行相同)。

最佳答案

我发现,如果您在测试期间转储请求 URL,则无论您访问哪个端点,它都始终 http://myapp.dev。因此 LaravelLocalization::setLocale() 和我的自定义 app('PREFIX') 都返回 null,这意味着没有一条路由被本地化测试期间。不管怎样,你都会被搞砸,因为如果你尝试访问没有区域设置前缀的路由,你会得到 302,但如果你指定了区域设置,框架将找不到该路由的定义。

One article帮助我找到了一个临时解决方案:您需要在 laravellocalization.php 中将 hideDefaultLocaleInURL 设置为 true。这样,与您的默认区域设置匹配的路由将不会有任何前缀,因此您可以像未本地化一样测试它们。

但是,问题仍然存在,因为当应用程序本地化时,您应该如何测试它? (例如,当您有需要测试的特定于语言的路由时)。这就提出了这个包是否与单元测试本身兼容的问题......

关于laravel - 如何使用 Laravel Localization 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43440215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com