Я использую 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, но есть ли более чистое решение.
То, как работают некоторые крючки, меня действительно пугает. Параметры не передаются до тех пор, пока не будет создан экземпляр контекста, поэтому нет простого или простого способа получить их в контексте до его фактического создания. Лучше всего использовать @BeforeScenario
событие с databaseReady
флаг, что-то вроде этого:
protected static $databaseReady;
/**
* @BeforeScenario
*/
public function setupDatabase()
{
if (!self::$databaseReady) {
// Set it up…
self::$databaseReady = true;
}
}
Но тогда я не знаю, как это делается в Laravel, но большинство фреймворков имеют конфигурацию и загрузчик, в том числе для разных сред. Это хорошая идея, чтобы сохранить эти вещи там и использовать скрипт начальной загрузки (который может быть запущен из @BeforeSuite
hook), который настраивает среду, в том числе базу данных.
Это грязный хак, но если вам нужно сделать это из @BeforeSuite
крючок вы можете получить это так:
use Behat\Testwork\ServiceContainer\Configuration\ConfigurationLoader;
$config = new ConfigurationLoader('BEHAT_PARAMS', getcwd() . '/behat.yml'))->loadConfiguration();
$baseUrl = $config[0]['extensions']['Behat\\MinkExtension']['base_url'];