在 Codeception 中通过验收测试使用固定装置的正确方法是什么?

What is the proper way to use fixtures with Acceptance tests in Codeception?

我正在使用 Yii2,并希望在我的验收测试中包含固定装置。

通过单元测试,您将 fixture 特征添加到 class,然后 return 使用 fixtures 方法的 fixture 数组,然后从 _before() 调用 $this->loadFixtures()方法,$this->unloadFixtures() 来自 _after() 方法。这非常有效。

对于 Cept 验收测试,class不使用 es,所以我不知道您将如何在此过程中使用固定装置。

对于 Cest 文件,我尝试将 fixtureTrait 添加到 Cest class,但没有成功。我是否应该将夹具特征添加到 Cest 文件中?

因此,在验收测试中使用固定装置的正确方法是什么?

经过大量谷歌搜索,我找到了满意的解决方案。

对于 Cept 文件,因为它们不使用 classes,所以您必须在 YAML 配置中包含 Yii2 模块,但仅包含 fixtures 部分。

在acceptance.suite.yml中:

modules:
    enabled:
        - WebDriver
        - Yii2:
            part:
                - init
                - fixtures
            transaction: false

我使用的是selenium,所以我也启用了WebDriver模块。我还发现有必要设置transaction: false,否则我的登录不起作用。
(可能是因为交易数据对网络请求不可用)

然后我必须 运行 构建命令才能使 $I->haveFixtures() 方法可用。

codeception build

我现在可以将灯具作为 Cept 文件的一部分,因此:

use tests\fixtures\DBAddressFixture;
use tests\fixtures\DBCustomerFixture;
use tests\fixtures\OAuthClientsFixture;

/* @var $scenario Codeception\Scenario */
$I = new AcceptanceTester($scenario);
$I->wantTo("Check that the account information page exists and works");

$I->haveFixtures([
    'customer' => DBCustomerFixture::className(),
    'address' => DBAddressFixture::className(),
    'auth' => OAuthClientsFixture::className()
]);

关于 Cest 文件。显然它应该像将 _fixtures() 方法添加到 Cest class 一样简单,尽管我还没有尝试过。

这里有一些有用的链接:

Codeception Yii2 Fixtures Documentation

CodeCeption Fixtures Issue 4099

Similar Whosebug issue 45881907

Yii2 Fixtures Documentation