如何在Yii2中的`ApiTester实例中调用`grabFixture()`方法?

时间:2018-03-20 06:11:16

标签: yii2 yii2-advanced-app codeception fixtures

我正在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

有人能引导我朝正确的方向前进吗?

1 个答案:

答案 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: .