在代码中使用StepObjects,错误消息:[ErrorException]未定义的变量:场景

时间:2015-03-26 16:01:54

标签: php laravel-4 codeception

我使用codeception和laravel4来测试我的API。 我有一组需要在不同测试中多次使用的函数。 我试图使用StepObjects来做到这一点。 基于this链接中的示例 这是我的代码: _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 我得到的错误是:未定义的变量:场景, 这是由这行代码引起的:

  

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

这是我得到的完整错误:

  

[ErrorException]未定义的变量:场景

     

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

     

PHPUnit_Framework_TestResult->运行(对象(Codeception \测试用例\ CEST))

     

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

     

PHPUnit_Framework_TestCase->运行(对象(并向PHPUnit_Framework_TestResult))

     

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

     

PHPUnit_Framework_TestSuite->运行(对象(并向PHPUnit_Framework_TestResult))

     

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

     

Codeception \ PHPUnit的\ Runner-> doEnhancedRun(对象(PHPUnit_Framework_TestSuite),   对象(PHPUnit_Framework_TestResult),数组)

     

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

     

Codeception \ SuiteManager->运行(对象(Codeception \ PHPUnit的\转轮),   对象(PHPUnit_Framework_TestResult),数组)

     

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

     

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

     

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

     

Codeception \ Codecept->运行(' API&#39)

     

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 \命令\运行 - >执行(对象(Symfony的\元器件\控制台\输入\ ArgvInput),   对象(Symfony的\元器件\控制台\输出\ ConsoleOutput))

     

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

     

的Symfony \元器件\控制台\命令\命令 - >运行(对象(Symfony的\元器件\控制台\输入\ ArgvInput),   对象(Symfony的\元器件\控制台\输出\ ConsoleOutput))

     

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

     

的Symfony \元器件\控制台\应用 - > doRunCommand(对象(Codeception \命令\运行),   对象(Symfony的\元器件\控制台\输入\ ArgvInput),   对象(Symfony的\元器件\控制台\输出\ ConsoleOutput))

     

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

     

的Symfony \元器件\控制台\应用 - > doRun(对象(Symfony的\元器件\控制台\输入\ ArgvInput),   对象(Symfony的\元器件\控制台\输出\ ConsoleOutput))

     

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

     

的Symfony \元器件\控制台\应用 - >运行()

1 个答案:

答案 0 :(得分:2)

你需要$ 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");
}