我是 Laravel 新手,我在编写一个测试函数时遇到问题,该函数断言我的欢迎页面的 HTTP 响应为 200,因为我知道我定义了 EN 和 FR 语言环境,这意味着测试应该测试两个本地主机: 8000/en 和 localhost:8000/fr。
这是我的exampletest.php:
<?php
namespace Tests\Feature;
use App\Http\Middleware\SetLanguage;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(301);
}
public function test_getRedirected_DefaultedEnglish_WelcomePage()
{
$response = $this->get('/en');
$response->assertStatus(200);
}
public function test_getRedirected_French_WelcomePage()
{
$response = $this->get('/fr');
$response->assertStatus(200);
}
}
我不喜欢为/en 和/fr 编写两次代码。
这是我的 web.php:
<?php
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
Route::redirect('/', 'en', 301);
Route::group(['prefix' => '{lang}', 'where' => ['lang' => '[a-zA-Z]{2}'], 'middleware' => 'setlanguage'], function() {
Auth::routes();
Route::get('/','App\Http\Controllers\welcomeController@index')->name('welcome');
});
我在下面编写了我的本地化中间件:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class SetLanguage
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
App::setLocale($request->lang);
return $next($request);
}
}
非常感谢您对上述问题的帮助。我相信测试应该是动态的。
提前谢谢您..
最佳答案
如果您想测试多个区域设置,我认为没有任何方法可以重复自己。但没有要求将每个测试放在单独的方法中。这可能有效,但我从未在应用程序中的多个区域设置上进行过测试。
public function provideLocales(): array
{
return [
"english" => ["en"],
"francais" => ["fr"],
];
}
/**
* @dataProvider provideLocales
*/
public function testWelcomePage($locale): void
{
$this->app->setLocale($locale);
$this->get(route("welcome"))
->assertStatus(200);
}
您可以更进一步,实际检查本地化内容是否正确提供。
public function provideLocales(): array
{
return [
"english" => ["en", "welcome"],
"francais" => ["fr", "bienvenue"],
];
}
/**
* @dataProvider provideLocales
*/
public function testWelcomePageContents($locale, $text): void
{
$this->app->setLocale($locale);
$this->get(route("welcome"))
->assertStatus(200)
->assertSeeText($text);
}
关于php - Laravel 功能测试与区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65909900/