我正在Yii2 2.0.14中构建API并使用Codeception运行测试。教程*中的示例表明我可以像这样调用fixture:
$profile = $I->grabFixture('profiles', 'user1');
但是,这似乎在我的测试类中没有:
<?php
namespace frontend\tests\api;
use frontend\tests\ApiTester;
class DemoCest
{
public function _fixtures()
{
return [
'users' => [
'class' => UserFixture::className(),
// fixture data located in tests/_data/user.php
'dataFile' => codecept_data_dir() . 'user.php'
],
];
}
public function demo(ApiTester $I)
{
$users = $I->grabFixture('users');
$I->wantTo('perform actions and see result');
$I->haveHttpHeader('Content-Type', 'application/x-www-form-urlencoded');
$I->sendPOST('/user/test', ['name' => 'davert', 'email' => 'davert@codeception.com']);
$I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); // 200
$I->seeResponseIsJson();
$I->seeResponseContainsJson(['message' => 'test OK']);
}
}
我已经看到你需要向frontend/tests/api-suite.yml
添加灯具,但是当我这样做时,Codeception会抛出异常
PHP注意:未定义的索引:测试中 /var/www/vendor/codeception/base/src/Codeception/Command/Run.php on 第389行
我完全迷失了。
actor: ApiTester
modules:
enabled:
- Yii2:
part: [orm, email, fixtures]
- \frontend\tests\Helper\Api
- REST:
url: http://securedata.test/api/v1
depends: PhpBrowser
part: Json
有人能引导我朝正确的方向前进吗?
答案 0 :(得分:1)
添加到您的套件配置中,您尚未在tests
下的codeception.yml
中定义paths
路径。
如果您查看错误指向的行,将会转到matchSingleTest
函数
在你的情况下
list(, $suite, $test) = $this->matchTestFromFilename($suite, $config['paths']['tests']);
它为tests
数组undefined index
提供$config['paths']
,如果您回溯,则会将codeception.yml
解析为$config
,
您使用的Yii 2.0.14
旧版本可能包含execute()
中缺少的部分,请参阅此ISSUE
请将tests
目录添加为.
,并确保codeception.yml
位于/tests
根目录。
请参阅以下
paths:
tests: .