Кодексация Проверяемые тесты _bootstrap variables

Состояние кода по умолчанию _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

Я сделал var_dump в _bootstrap.php, и он действительно запускается один раз перед приемочными испытаниями, но переменные из него недоступны в моих тестах.

Я не могу найти никакой документации по этому поводу.

Я пытаюсь инициализировать экземпляр Faker для использования в моих тестах.

Ответ 1

Я считаю, что документация по этому вопросу довольно запутанна. Я пытался сделать то же самое безрезультатно. Поэтому я закончил использование Fixtures, поместив его в файл _bootstrap.php:

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

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

(Вы также можете использовать отдельный файл fixtures.php и включить его в свой тест.)

Это позволяет вам получить объект faker или что-то еще подобное:

Fixtures::get('fake');

Странно то, что если вы посмотрите на Fixtures docs, он фактически упоминает использование библиотеки Faker для создания тестовых данных в файле начальной загрузки.

Ответ 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", "[email protected]");
define("password", "my_secure_pass")

Используйте его следующим образом:

public function testValidLogin(AcceptanceTester $I)
{
        $I->fillField(loginPage::$username, email);
        $I->fillField(loginPage::$password, password);
        $I->click("LOG IN");
}

ПРИМЕЧАНИЕ: никаких знаков доллара. используйте только как "email" и "password"

Ответ 4

Я сбросил все переменные PHP и подтвердил, что любые переменные, установленные в файле _bootstrap.php, не существуют и недоступны в файле MyCept.php. Поэтому я прибегал к добавлению следующего в MyCept.php:

include '_bootstrap.php';

Это делает переменные, установленные в _bootstrap.php доступными. Конечно.