在codeception中使用StepObjects,报错信息:[ErrorException] Undefined variable: scenario

Using StepObjects in codeception, error message: [ErrorException] Undefined variable: scenario

我正在使用 codeception 和 laravel4 来测试我的 API。 我有一组函数需要在不同的测试中多次使用。 我正在尝试使用 StepObjects 来执行此操作。 基于 this link 中的示例 这是我的代码: _steps文件夹中的代码

namespace ApiTester;
 
 class generalSteps extends \ApiTester {
 
     public function json_format( $path = "/users/me", $desc = "TEST") {
         $I = $this;
         $I->wantTo($desc);
         $I->amBearerAuthenticated(\LoginCest::$token);
         $I->sendPOST($path);
        $I->seeResponseJsonMatchesJsonPath('$.content.data');
    } }

我的_bootstrap.php文件:

  \Codeception\Util\Autoload::registerSuffix('Steps',
     __DIR__.DIRECTORY_SEPARATOR.'_steps');

这就是我尝试在 API 文件夹下的函数中访问它的方式:

public function correct_json_format(ApiTester $I) {
       $I= new \ApiTester\generalSteps($scenario);
        $I->json_format(self::$path, "Testing the Json format for view my profile");
    }

当我 运行 ./vendor/bin/codecept 运行 api -vvv 我得到的错误是:Undefined variable: scenario, 这是由这行代码引起的:

$I= new \ApiTester\generalSteps($scenario);

这是我得到的完整错误:

[ErrorException] Undefined variable: scenario

0 /Applications/MAMP/htdocs/larave-codeception/vendor/phpunit/phpunit/src/Framework/TestCase.php(693):

PHPUnit_Framework_TestResult->run(Object(Codeception\TestCase\Cest))

1 /Applications/MAMP/htdocs/larave-codeception/vendor/phpunit/phpunit/src/Framework/TestSuite.php(716):

PHPUnit_Framework_TestCase->run(Object(PHPUnit_Framework_TestResult))

2 /Applications/MAMP/htdocs/larave-codeception/vendor/codeception/codeception/src/Codeception/PHPUnit/Runner.php(100):

PHPUnit_Framework_TestSuite->run(Object(PHPUnit_Framework_TestResult))

3 /Applications/MAMP/htdocs/larave-codeception/vendor/codeception/codeception/src/Codeception/SuiteManager.php(153):

Codeception\PHPUnit\Runner->doEnhancedRun(Object(PHPUnit_Framework_TestSuite), Object(PHPUnit_Framework_TestResult), Array)

4 /Applications/MAMP/htdocs/larave-codeception/vendor/codeception/codeception/src/Codeception/Codecept.php(166):

Codeception\SuiteManager->run(Object(Codeception\PHPUnit\Runner), Object(PHPUnit_Framework_TestResult), Array)

5 /Applications/MAMP/htdocs/larave-codeception/vendor/codeception/codeception/src/Codeception/Codecept.php(149):

Codeception\Codecept->runSuite(Array, 'api', NULL)

6 /Applications/MAMP/htdocs/larave-codeception/vendor/codeception/codeception/src/Codeception/Command/Run.php(262):

Codeception\Codecept->run('api')

7 /Applications/MAMP/htdocs/larave-codeception/vendor/codeception/codeception/src/Codeception/Command/Run.php(191):

Codeception\Command\Run->runSuites(Array, Array)

8 /Applications/MAMP/htdocs/larave-codeception/vendor/symfony/console/Symfony/Component/Console/Command/Command.php(253):

Codeception\Command\Run->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

9 /Applications/MAMP/htdocs/larave-codeception/vendor/symfony/console/Symfony/Component/Console/Application.php(889):

Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

10 /Applications/MAMP/htdocs/larave-codeception/vendor/symfony/console/Symfony/Component/Console/Application.php(193):

Symfony\Component\Console\Application->doRunCommand(Object(Codeception\Command\Run), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

11 /Applications/MAMP/htdocs/larave-codeception/vendor/symfony/console/Symfony/Component/Console/Application.php(124):

Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

12 /Applications/MAMP/htdocs/larave-codeception/vendor/codeception/codeception/codecept(27):

Symfony\Component\Console\Application->run()

您需要 $scenario 变量。如果您在 CEST 的函数调用中添加第二个参数,您就可以获得它。如果您将它们添加到参数列表中,它会自动提供给您的测试方法。

public function correct_json_format(ApiTester $I, $scenario) {
  $I= new \ApiTester\generalSteps($scenario);
  $I->json_format(self::$path, "Testing the Json format for view my profile");
}