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

Laravel 7: unit test set default request header in setUp()

我想在 setUp 方法中为测试中的所有请求设置 headers,而不是分别对所有测试进行设置。

有没有简单的方法来做到这一点?

例如:

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

收件人:

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

当然可以。您可以创建一个中间父 class 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 '';
}

此外,如果您的令牌在 $response 变量中发生变化,您可以构建一个 return 令牌的函数,这样您就可以轻松地覆盖单个测试中的方法 classes .您可以选择 class 属性 和 setter 方法,效果相同。

如果你想得到你想登录的用户的token,很容易搞定。只需使 getBearerToken 方法 return 类似于 auth('api')->login($this->authUser);(这是 return 实际标记)并为每个测试文件设置一次 $authUser。希望这可以帮助您朝着正确的方向前进。