Как название, моя цель - откат любого фиксации, сделанного во время функциональных тестов Behat. Я проверил этот ответ очень похожим, но это происходит два года назад, и это кажется невозможным.
Возможно, теперь с Behat 3 это возможно.
Я знаю, что с PHPUnit я могу достичь чего-то подобного, используя методы startUp и tearDown.
Я попытался запустить и отменить транзакцию, связанную с аннотациями @BeforeScenario и @AfterScenario, но, похоже, что это так, и приложение не использует один и тот же экземпляр диспетчера сущностей.
Некоторые советы по этому поводу?
Спасибо.
UPDATE
Спасибо всем за ваши советы. Вот некоторые новые соображения:
-
ЗАГРУЗКИ FIXTURES: Да, это работает. Я могу запускать приборы до начала тестов, но проблема (моя ошибка, чтобы не упоминать об этом) заключается в том, что для монтажа иногда требуется несколько минут, и до начала тестов ждать 10 или более минут. >
-
BEGIN/ROLLBACK TRANSACTION: он работает тоже или кажется. Я не получаю ошибок, но данные, записанные во время тестов, все еще находятся в моей базе данных, когда они закончились. Я добавил первый в методе tagged @BeforeScenario e последний в методе, отмеченном @AfterScenario
$this->kernel->getContainer() ->get('doctrine.orm.entity_manager') ->getConnection() ->beginTransaction(); $this->kernel->getContainer() ->get('doctrine.orm.entity_manager') ->getConnection() ->rollBack();
- SAVEPOINT. Я думаю, что именно то, что мне нужно, но мои данные все еще существуют. Я попытался добавить создание точки сохранения в свой метод @BeforeScenario и откат метода @AfterScenario
public function gatherContexts(BeforeScenarioScope $scope) { $environment = $scope->getEnvironment(); $connection = $this->kernel->getContainer()->get('doctrine.orm.entity_manager')->getConnection(); $connection->beginTransaction(); $connection->createSavepoint('tests'); } public function rollback(AfterScenarioScope $scope) { $connection = $this->kernel->getContainer()->get('doctrine.orm.entity_manager')->getConnection(); $connection->rollbackSavepoint('tests'); }
Все эти тесты используются для тестирования моего проекта REST API. После этих соображений я думаю, что Behat и мое приложение не используют один и тот же экземпляр менеджера сущности. Можете ли вы поделиться одним и тем же экземпляром между вашими тестами и вашими проектами во время тестов?