Получить base_url в Behat @BeforeSuite

Я использую Behat и Mink для тестирования приложения с использованием инфраструктуры Laravel, и я хочу использовать Artisan для настройки базы данных перед запуском тестов.

Чтобы правильно настроить Artisan, мне нужно знать домен, который будет тестироваться, и, следовательно, какую среду Laravel использовать. Это указано в behat.yml под различными используемыми профилями. Например:

default:
extensions:
Behat\MinkExtension\Extension:
base_url: http://www.example.com
...
daniel:
extensions:
Behat\MinkExtension\Extension:
base_url: http://example.dev

Можно ли получить значение base_url из @BeforeSuite?

Кажется, что главная проблема здесь заключается в том, что @BeforeSuite должен быть статическим и поэтому не имеет доступа к Mink, поэтому я не могу просто $this->getMinkParameter('base_url'),

Я могу получить доступ к параметрам с $suiteEvent->getContextParameters(), поэтому я мог бы продублировать там URL, но есть ли более чистое решение.

2

Решение

То, как работают некоторые крючки, меня действительно пугает. Параметры не передаются до тех пор, пока не будет создан экземпляр контекста, поэтому нет простого или простого способа получить их в контексте до его фактического создания. Лучше всего использовать @BeforeScenario событие с databaseReady флаг, что-то вроде этого:

protected static $databaseReady;

/**
* @BeforeScenario
*/
public function setupDatabase()
{
if (!self::$databaseReady) {

// Set it up…

self::$databaseReady = true;
}
}

Но тогда я не знаю, как это делается в Laravel, но большинство фреймворков имеют конфигурацию и загрузчик, в том числе для разных сред. Это хорошая идея, чтобы сохранить эти вещи там и использовать скрипт начальной загрузки (который может быть запущен из @BeforeSuite hook), который настраивает среду, в том числе базу данных.

1

Другие решения

Это грязный хак, но если вам нужно сделать это из @BeforeSuite крючок вы можете получить это так:

use Behat\Testwork\ServiceContainer\Configuration\ConfigurationLoader;
$config = new ConfigurationLoader('BEHAT_PARAMS', getcwd() . '/behat.yml'))->loadConfiguration();
$baseUrl = $config[0]['extensions']['Behat\\MinkExtension']['base_url'];
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector