我使用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 \元器件\控制台\应用 - >运行()
答案 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");
}