我正在使用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)); } }
我如何克服这个问题?
答案是更换 _fixtures() 方法使用以下方法:
_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', ], ]); }