Codeception Cept 测试 _bootstrap 变量

Posted

技术标签:

【中文标题】Codeception Cept 测试 _bootstrap 变量【英文标题】:Codeception Cept tests _bootstrap variables 【发布时间】:2014-10-20 08:03:18 【问题描述】:

Codeception 默认_bootstrap.php 文件状态:

<?php
// Here you can initialize variables that will be available to your tests

所以我想在其中初始化一个变量:

<?php

$a = 5;

但是,当我使用它时,我的 SomeAcceptanceCept:

<?php
// ....
$I->fillField('description', $a);

我得到:ErrorException: Undefined variable: a

我在_bootstrap.php 中做了var_dump,它确实在验收测试之前运行了一次,但它的变量在我的测试中不可用。

我似乎找不到任何关于此的文档。

我实际上是在尝试初始化 Faker 实例以在我的测试中使用。

【问题讨论】:

【参考方案1】:

我发现这方面的文档相当混乱。我试图做同样的事情无济于事。所以我最终通过将它放在 _bootstrap.php 文件中来使用 Fixtures:

use Codeception\Util\Fixtures;
use Faker\Factory;

$fake = Factory::create();
Fixtures::add('fake', $fake);

(您也可以使用单独的 fixtures.php 文件并将其包含在您的测试中。)

这可以让您获得伪造的对象或其他类似的东西:

Fixtures::get('fake');

奇怪的是,如果您查看Fixtures docs,它实际上提到了使用 Faker 库在引导文件中创建测试数据。

【讨论】:

这真令人气愤。 _bootstrap.php 还不如什么都不做。请记住在所有文件中设置您的命名空间,例如。 use Codeception\Util\Fixtures;_bootstrap.php 和您的 *Cept.php 中。当然,您可以轻松地在每个 *Cest.php 文件的顶部运行 include,例如 @Jason 和 @Duncan 都建议。 我要补充一点,坚持使用 _bootstrap.php 并实施@Jason 的修复提供的一个好处是能够轻松地从文件夹中的 Cepts 访问变量。否则你的包含会很乱,例如。 include('../../_bootstrap.php')include('../_bootstrap.php')。如果您决定重构测试文件夹结构,那将是一件痛苦的事。【参考方案2】:

我执行以下操作:

// _bootstrap.php

$GLOBALS['a'] = 5;

然后在我的测试中我这样称呼它:

 // MyCest.php

    public function testItWorks(\Tester $I)
    
        global $a;
        $I->fillField('description', $a);
    

我没有对 Cept 文件做太多工作,但可能类似的东西会起作用。

【讨论】:

【参考方案3】:

在 bootstrap.php 中这样定义:

<?php
// This is global bootstrap for autoloading


define("email", "someone@abc.com");
define("password", "my_secure_pass")

像这样使用它:

public function testValidLogin(AcceptanceTester $I)

        $I->fillField(loginPage::$username, email);
        $I->fillField(loginPage::$password, password);
        $I->click("LOG IN");

注意:没有美元符号。仅用作“电子邮件”和“密码”

【讨论】:

【参考方案4】:

我转储了所有 PHP 变量并确认 _bootstrap.php 文件中设置的任何变量都不存在,并且在 MyCept.php 文件中不可用。所以我求助于在 MyCept.php 的顶部添加以下内容:

include '_bootstrap.php';

这使得 _bootstrap.php 中设置的变量可用。当然。

【讨论】:

'如何使 _bootstrap.php 文件中设置的变量在 Codeception Cept 文件中可用?'

以上是关于Codeception Cept 测试 _bootstrap 变量的主要内容,如果未能解决你的问题,请参考以下文章

Codeception CEST 接受测试,如何在每次测试之前重新运行 __bootstrap 代码?

Codeception:哪些测试组组合是可能的?

Codeception:生成验收测试在并行虚拟机上引发异常

Codeception - 验收测试有效,但功能测试无效

Codeception 全堆栈的 PHP 测试框架

Codeception 在 CEST 内的所有测试之前运行