在单元测试期间如何使路由模型绑定在 Laravel 中工作?
How do I make route model binding work in Laravel during unit tests?
我的大部分单元测试都使用 WithoutMiddleware,因此我可以测试控制器和资源端点。然而路由模型绑定是一个中间件,所以控制器没有得到他们需要的模型。
这是我的问题,可能不再相关。以前是 laravel 测试可以使用中间件,也可以不使用中间件。因此,路由模型绑定将与其他所有内容一起打开或关闭。现在 Laravel 测试支持省略特定的中间件。所以你可以使用这样的东西......并保持其他中间件包括绑定的东西。
namespace Tests\Feature;
use App\Http\Middleware\VerifyCsrfToken;
use ...
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Tests\TestCase;
class BankDisplayControllerTest extends TestCase{
use DatabaseTransactions;
//use WithoutMiddleware;
protected function setUp(){
parent::setUp();
$this->withoutMiddleware([VerifyCsrfToken::class]);
}
...
我的大部分单元测试都使用 WithoutMiddleware,因此我可以测试控制器和资源端点。然而路由模型绑定是一个中间件,所以控制器没有得到他们需要的模型。
这是我的问题,可能不再相关。以前是 laravel 测试可以使用中间件,也可以不使用中间件。因此,路由模型绑定将与其他所有内容一起打开或关闭。现在 Laravel 测试支持省略特定的中间件。所以你可以使用这样的东西......并保持其他中间件包括绑定的东西。
namespace Tests\Feature;
use App\Http\Middleware\VerifyCsrfToken;
use ...
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Tests\TestCase;
class BankDisplayControllerTest extends TestCase{
use DatabaseTransactions;
//use WithoutMiddleware;
protected function setUp(){
parent::setUp();
$this->withoutMiddleware([VerifyCsrfToken::class]);
}
...