代码之家  ›  专栏  ›  技术社区  ›  Dubby

夹具不可用于后续测试

  •  0
  • Dubby  · 技术社区  · 7 年前

    我正在使用Codeception和fixture来测试我的API,但这些fixture似乎只在第一次测试中可用。以下是我的测试:

    class ActionCest extends BaseTestCase
    {
        public function _fixtures()
        {
            return [
                'profiles' => [
                    'class' => UserFixture::className(),
                    // fixture data located in tests/_data/user.php
                    'dataFile' => codecept_data_dir() . 'user.php'
                ],
                'actions' => [
                    'class' => ActionFixture::className(),
                    'dataFile' => codecept_data_dir() . 'action.php'
                ],
            ];
        }
    
        public function createAction(ApiTester $I)
        {
            $user = $I->grabFixture('profiles', 'user1');
    
            $I->wantTo('Add action');
            $I->haveHttpHeader('Authorization', 'Bearer '. $user['auth_key']);
    
            $payload = [
                'action_id' => 123,
                'saved' => true,
                'viewed' => false,
                'complete' => false,
            ];
    
            $I->sendPOST('/action/save', $payload);
            $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); // 200
            $I->seeResponseContainsJson($this->buildResponsePayload($payload));
        }
    
        public function getAction(ApiTester $I)
        {
            $user = $I->grabFixture('profiles', 'user1');
            //$action = $I->grabFixture('actions', 'action1');
    
            $I->wantTo('Retrieve action');
            $I->haveHttpHeader('Authorization', 'Bearer '. $user['auth_key']);
    
            $I->sendPOST('/action/get-by-id/1');//'. $action['action_id']);
            $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); // 200
            $I->seeResponseContainsJson($this->buildResponsePayload($payload));
        }
    }
    

    我如何克服这个问题?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Dubby    7 年前

    答案是更换 _fixtures() 方法使用以下方法:

        public function _before(ApiTester $I)
        {
            $I->haveFixtures([
                'users' => [
                    'class' => UserFixture::className(),
                    'dataFile' => codecept_data_dir() . 'user.php',
                ],
                'actions' => [
                    'class' => UserActionFixture::className(),
                    'dataFile' => codecept_data_dir() . 'action.php',
                ],
            ]);
        }
    
    推荐文章