gpt4 book ai didi

codeception - 使用 Codeception 在 API 中模拟外部服务

转载 作者:行者123 更新时间:2023-12-02 03:19:05 24 4
gpt4 key购买 nike

我有 API 端点:

[GET] /car/:carId

这实际上是一个 Controller Action (CarController::car( $carId ) ):

public function car( $cardId )
{
$carId = (int) \Yii::$app->request->get( 'car_id' );

if ( empty( $carId ) ) {
throw new \yii\web\BadRequestHttpException( 'Wrong car id. It must be integer, greater than 0' );
}

$externalVinService = new externalVinService();

$vinNumberResponseData = $externalVinService->getCarVinNumber( $carId );

if ( $vinNumberResponseData['code'] !== 200 ) {
\Yii::$app->response->statusCode = $vinNumberResponseData['code'];
return [ 'message' => 'Something is wrong with car VIN external service' ];
}

$carModel = new carModel( $cardId );

$carData = $carModel->getCarData();

$carData['vin'] = $vinNumberResponseData['data']['vin'];

\Yii::$app->response->statusCode = 200;

return $carData;
}

我想编写测试此 Controller 操作的功能测试,例如:

$I->wantTo( 'check if I get correct car data' );
$I->sendGET( '/car/10' );
$I->seeResponseCodeIs( 200 );
$I->seeResponseIsJson();
// Asserting response data, etc
//...
//...

我能以某种方式模拟 externalVinService 类吗?使用单元测试时不会有问题,但在我的场景中我找不到一个简单的方法来做到这一点。

有什么想法吗?

最佳答案

尝试使用AspectMock .

其中一个功能是:为在任何地方调用的类方法创建测试替身。

如果您使用框架模块(例如 Yii2)模块但不适用于 PhpBrowser 或 WebDriver,它会起作用。

关于codeception - 使用 Codeception 在 API 中模拟外部服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com