Среда тестирования Laravel 5 не устанавливается в модульных тестах Codeception

Я использую Laravel 5 и Codeception, и я хотел бы использовать базу данных SQLite в памяти для своих модульных тестов, однако я не могу настроить свою среду на «тестирование» в Codeception. Я использую модуль Laravel5, и в моем файле unit.suite.yml определено следующее:

class_name: UnitTester
modules:
    enabled: [Asserts, UnitHelper, Laravel5]
    config:
        Laravel5:
            environment_file: .env.testing

У меня есть файл .env, который определяет все мои локальные настройки, а затем файл .env.testing, который определяет все настройки, относящиеся к тестированию. Тем не менее, кажется, что он никогда не устанавливает правильную среду.

Чтобы протестировать среду, я только что сделал:

$this->assertEquals('testing', \App::environment());

и я всегда получаю:

Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'testing'
+'local'

Кто-нибудь знает, что я делаю неправильно?


person bb89    schedule 08.04.2015    source источник


Ответы (3)


Вы установили имя среды в файле .env.testing?

APV_ENV=testing
person Laurence    schedule 08.04.2015
comment
Да, у меня есть этот набор, а также все другие переменные, относящиеся к тестированию, в моем файле .env.testing (поверьте мне, я проверял и перепроверял это много раз!) - person bb89; 08.04.2015
comment
Итак, он вообще загружает какие-либо данные из вашего файла .env.testing? - person Laurence; 08.04.2015
comment
Хорошо, это странно... видимо, все переменные загружаются из .env.testing правильно, кроме APP_ENV. Это все еще отображается как «локальное», хотя я установил «тестирование» ... Спасибо, что заставил меня проверить это, поскольку я, вероятно, не стал бы вникать в это. Есть идеи, почему это происходит? - person bb89; 08.04.2015
comment
Здесь есть несколько решений: stackoverflow.com/questions/31061888/ - person Gergely Havlicsek; 14.08.2015
comment
Поздно на вечеринку, но APP_ENV, вероятно, был установлен как локальный в вашем файле .env.testing! - person rrrhys; 20.12.2016

Это может быть связано с тем, что у вас есть файл env, определенный в вашей глобальной конфигурации кода. В файле codeception.yml в корневом каталоге вашего проекта проверьте значение параметров, должно быть что-то вроде следующего

params:
    - .env.testing
person xelber    schedule 08.03.2017

Я совершенно новичок в laravel, но только что обнаружил, что единственный способ запустить тесты на моем локальном компьютере и (например) Codeship — это символическая ссылка .env, когда мне это нужно. (Я знаю, это не очень чистый способ, но он работает)

У меня есть рядом с моим локальным файлом .env:

#.env.testing
APP_ENV=testing
DB_CONNECTION=default_mysql
DB_DATABASE=test_db
... etc

И:

#.env.codeship
APP_ENV=codeship
DB_CONNECTION=codeship

Для локальных тестов я сделал псевдоним:

alias pl='rm .env; ln -s .env.testing .env; phpunit; rm .env; ln -s .env.local .env'

Где .env.local содержит копию моего локального файла .env.

И для тестового конвейера Codeships:

ln -s .env.codeship .env
php artisan migrate --seed
phpunit

Конфигурация базы данных:

// CODESHIP
'codeship' => [
    'driver' => 'mysql',        
    'username' => getenv('MYSQL_USER'),
    'password' => getenv('MYSQL_PASSWORD'),
    // etc        
],

// LOCAL DEV // PHPUNIT
'default_mysql' => [
    'driver' => 'mysql',
    'username' => env('DB_USERNAME', 'localhost'),
    'password' => env('DB_PASSWORD', 'forge'),
    // etc        
],

Если у кого-то есть лучшие идеи, я рад услышать.

person everyman    schedule 09.09.2015