Laravel 7:单元测试在 setUp() 中设置默认请求标头

Mad*_*sen 4 testing global laravel laravel-7

我想在 setUp 方法中为测试中的所有请求设置标头,而不是单独对所有测试进行设置。

是否有捷径可寻?

所以例子:

$this->withHeaders([
            'Authorization' => 'Bearer ' . $response['data']['token'],
            'Accept' => 'application/json'
        ])
Run Code Online (Sandbox Code Playgroud)

到:

setUp(){
$this->setHeaders([
            'Authorization' => 'Bearer ' . $response['data']['token'],
            'Accept' => 'application/json'
        ]);
}
Run Code Online (Sandbox Code Playgroud)

小智 18

当然。您可以创建一个中间父类TestCaseWithToken(或任何您想命名的名称),它将扩展PHPUnit\Framework\TestCase并在其中添加您的重写方法

protected function setUp(): void 
{
   parent::setUp();
   // set your headers here
   $this->withHeaders([
            'Authorization' => 'Bearer ' . $this->getBearerToken(),
            'Accept' => 'application/json'
        ]);

}

protected function getBearerToken()
{
   return '';
}
Run Code Online (Sandbox Code Playgroud)

此外,如果$response变量中的标记发生变化,您可以构建一个返回标记的函数,以便您可以轻松地重写各个测试类中的方法。您可以选择类属性和 setter 方法,其工作原理相同。

如果你想获取你想登录的用户的token,也可以轻松完成。只需让该getBearerToken方法返回类似的内容auth('api')->login($this->authUser);(这将返回实际的令牌)并设置$authUser每个测试文件一次。希望这可以帮助您朝着正确的方向前进。