如何使用模型注入但不使用中间件来测试控制器?

时间:2019-07-28 14:14:20

标签: laravel phpunit

当我对此进行测试时:

self.yourview.isUserInteractionEnabled = true

测试失败,因为我在控制器中使用了模型注入。我知道这种注入需要“绑定”中间件。但是,由于我禁用了所有中间件,因此无法完成注入。

出于身份验证原因,我禁用了中间件。

我尝试添加此内容:

use WithoutMiddleware;

public function testPutSportOK()
{
    $sport = Sport::first();

    $sportName = 'Modification '.$sport->sport_name;
    $position = random_int(0,100);

    $post = [
        'sport_name' => $sportName,
        'position' => $position
    ];

    $response = $this->json('PUT', '/api/sports/'.$sport->id, $post);

    $response->assertStatus(200);

但是还是一样。

如何在没有中间件的情况下使用模型注入来测试控制器?

Merci

Dom

编辑:添加带有模型注入的控制器:

$this->withMiddleware('bindings');

2 个答案:

答案 0 :(得分:0)

从源代码here中,您实际上可以通过提供一系列想要禁用的中间件来禁用(而不是全部禁用)某些中间件。

$this->withoutMiddleware([
    \App\Http\Middleware\Authenticate,
    \App\Http\Middleware\RedirectIfAuthenticated,
    // Add more here
]);

答案 1 :(得分:0)

最后我放弃了模型注入的想法。希望在路由和控制器之间传递经典ID。

因此,我的phpunit + postman测试可以完美地工作,并且我不再对这种“绑定”中间件感到厌烦。

当然,需要在控制器中再写一行以读取数据库中的相应模型。但这只是一行。我接受!

Dominique祝您一切顺利