首页 > 解决方案 > 如何在 Codeception 中编写可重用的方法/操作?

问题描述

我正在使用 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);
            }
        );
    }
}

我确实在这里这里阅读了文档,但我不太清楚如何在这种情况下实现可重用性。

我想知道是否有办法将其添加为 Helper 的一部分,以便可以在任何单个测试中重用它而无需重复代码。有什么想法和/或帮助吗?

标签: phptestingcodeceptionweb-api-testing

解决方案


我在这里得到了答案。以下是我遵循的步骤:

  • 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在运行任何测试套件之前运行该命令。


推荐阅读