【问题标题】:Forcing locale in Laravel Dusk在 Laravel Dusk 中强制设置语言环境
【发布时间】:2018-03-31 19:30:11
【问题描述】:

我们如何在测试中强制 Dusk 使用的语言环境?

浏览器启动时设置了 FR 语言环境,因此我的应用程序正在输出法语。

无论开发人员在运行测试时在其系统上设置的区域设置如何,我都需要始终如一地进行所有测试。

在中间件堆栈中,我有一个 LocaleMiddleware 负责根据请求标头(由浏览器自动发送)选择区域设置。

如果可能,我想避免在应用程序代码中包含特定于测试的代码(如下所示,在环境为“测试”时强制使用区域设置)

【问题讨论】:

    标签: php laravel laravel-dusk


    【解决方案1】:

    使用setLocale()方法:

    app()->setLocale('en');
    

    或者:

    App::setLocale('en');
    

    您也可以在运行时使用setLocale 方法更改活动语言

    https://laravel.com/docs/5.5/localization#introduction

    更新

    您也可以在测试环境的中间件中设置语言环境:

    if (env('APP_ENV') === 'testing') {
        app()->setLocale('en');
    
        return $next($request);
    }
    

    【讨论】:

    • 你在哪里使用它?在测试中?我的应用程序有一个全局中间件,它将区域设置设置为浏览器在标头中发送的任何值,因此从测试本身设置区域设置不起作用,因为它稍后会被覆盖。
    • 你试过使用WithoutMiddleware trait吗?此外,在中间件内部,您可以检查环境并选择不覆盖语言环境。或者您甚至可以为测试环境设置 en 语言环境。
    • 不太热衷于在生产代码中(在中间件中)拥有专用于测试的代码。这是我作为最后手段保留的一个选项。想要配置 Dusk。被否决是因为它没有回答问题(尽管我必须说这个问题不够精确)。由于中间件的建议,现在很乐意投票。
    • 另外,我进行了一些测试,以确保语言环境中间件按预期工作。如果我使用您的方法来测试应用程序环境,这些测试将被破坏。
    • if (env('APP_ENV') === 'testing') if (app()->environment('testing'))
    猜你喜欢
    • 2021-03-03
    • 1970-01-01
    • 2022-11-13
    • 2019-04-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2010-09-09
    • 2011-06-24
    相关资源
    最近更新 更多