我是 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);
}
}
感谢您对上述问题的帮助。我认为测试应该是动态的。
先谢谢你..
答案 0 :(得分:0)
如果您想测试多个语言环境,我认为没有办法重复自己。但是没有要求将每个测试放在单独的方法中。这可能有效,但我从未在我的应用程序中对多个语言环境进行过测试。
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);
}