codeception rest api auth 标头

问题描述

在测试 codeception rest api 时如何发送 auth 标头?

我现在拥有的:

  1. Yii2 项目
  2. "codeception/module-yii2": "^1.0.0"
  3. "codeception/module-rest": "^1.3"
  4. 通过命令 codecept generate:cest api TestName 生成的测试类

我的课堂测试

 class CreateWorkspaceCest
 {
    public function _before(ApiTester $I)
    {

    }

    public function successCreate(ApiTester $I)
    {
        $title = 'create test';
        $description = 'test description';

        $I->sendPost('/workspace/create',[
            'title' => $title,'description' => $description,]);

        $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); // 200
        $I->seeResponseIsJson();

        $I->seeResponseContainsJson([
            'title' => $title,'status' => 'active',]);
    }
}

现在它以 403 代码失败,因为后端需要标头 JWT-Key: <TOKEN>

我如何在 sendPost 中发送身份验证标头 在编写测试期间,最好将身份验证令牌存储在一个地方以避免代码重复?

解决方法

Codeception 有一个名为 haveHttpHeader 的方法,您可以使用它添加任何标题。

这在 https://docs.mongodb.com/manual/reference/command/insert/ 的中途有记录。 this page 上还有一个关于授权的部分。

有一些内置的授权方法,例如 amBearerAuthenticatedamAWSAuthenticated,但我认为 JWT 没有特定的方法。

 class CreateWorkspaceCest
 {
    public function _before(ApiTester $I)
    {

    }

    public function successCreate(ApiTester $I)
    {
        $title = 'create test';
        $description = 'test description';

        // You can add any header like this:
        $I->haveHttpHeader('Content-Type','application/json');
        $I->haveHttpHeader('Authorization','Bearer user-one-access-token');

        // To add the header that you show in the question,you can use:
        $I->haveHttpHeader('JWT-Key','<TOKEN>');

        $I->sendPost('/workspace/create',[
            'title' => $title,'description' => $description,]);

        $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); // 200
        $I->seeResponseIsJson();

        $I->seeResponseContainsJson([
            'title' => $title,'status' => 'active',]);
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...