我正在使用Codeception编写一组API测试,而我希望在每个测试中使用的一种方法看起来像:
public function ActionWasNotDoneIfParamsAreMissing(ApiTester $I): void
{
$url = $this->serviceUrl;
$method = $this->method;
$dataCombination = $I->pcArrayPowerSet($this->data);
foreach ($dataCombination as $combination) {
$I->seeExceptionThrown(
BadRequestHttpException::class,
static function () use ($I, $url, $combination) {
$I->$method($url, $combination);
}
);
}
}
我确实读过文档here和here,但对我来说还不太清楚如何在这种情况下实现可重用性。
我想知道是否有一种方法可以将其添加为Helper的一部分,这样它就可以在任何单个测试中重复使用,而无需重复代码。有任何想法和/或帮助吗?
StepObject
类:php vendor/bin/codecept generate:stepobject api CommonTest
public function checkIfHttpMethodIsNotAccepted(
string $serviceUrl,
array $notAllowedMethod = [],
array $data = []
): void {
$I = $this;
foreach ($notAllowedMethod as $method) {
$I->seeExceptionThrown(
BadRequestHttpException::class,
static function () use ($I, $serviceUrl, $method, $data) {
$I->$method($serviceUrl, $data);
}
);
}
}
public function ActionWasNotDoneIfHttpMethodIsNotAccepted(Step\Api\CommonTest $I): void
{
$I->checkIfHttpMethodIsNotAccepted(
$this->serviceUrl,
self::$notAllowedMethod,
$this->data
);
}
从现在开始,我只需要在测试类中做最后一遍,而不必在所有地方重复代码。希望对别人有帮助!注意:如果由于某种原因出错,请在运行任何测试套件之前运行命令
php vendor/bin/codecept build
。