symfony2 behat/mink HTTP POST не использует тестовую базу данных env

Я использую Symfony 2.7 с Behat 3 и Behat/mink 1.5 (как в composer.json).

behat.yml:

default:
suites:
    default:
        contexts:
            - FeatureContext:
                service: '@user.service'
extensions:
    Behat\MinkExtension:
        base_url: http://api.localhost.dev
        goutte: ~
        selenium2: ~
    Behat\Symfony2Extension: ~

Я создаю JSON API, а также создал 2 базы данных, одну для DEV и другую для TEST ("my-db" и "my-db-test")

config_test.yml:
...
doctrine:
dbal:
    host:     127.0.0.1
    dbname:   my-db-test
    user:     root
    password: root

config_dev.yml:
...
doctrine:
dbal:
    host:     127.0.0.1
    dbname:   my-db-dev
    user:     root
    password: root

Моя проблема начинается при попытке запустить сценарий, который отправляет HTTP-запрос POST (используя Guzzle в качестве клиента) на сервер.

Scenario: Create a programmer
Given I have the payload:
"""
{
  "name": "John",
  "lastname" : "Doe",
  "username": "john.doe",
  "email": "john.doe@email.com",
  "password": "password",
  "birth": "10/10/1970",
  "type": "normal"
}
"""
When I request "POST" "/users"
Then the response status code should be "201"
And the "Location" header should be "http://api.localhost.dev/users/john.doe"

В файле FeatureContext.php у меня есть сценарий @Before

/**
 * @BeforeScenario
 */
public function clearData()
{
   $this->_service->deleteUsers();
}

Это правильно удаляет TEST DDBB, как и ожидалось. Проблема в том, что запрос HTTP POST проходит через контроллер (очевидно), а затем попадает в службу, чтобы создать пользователя в базе данных DEV (вместо использования недавно очищенной TEST DDBB)

Когда я запускаю сценарий GET, используя данные TableNode:

 | name | lastname| username | email             |  password  |birth       | type|
 | John | Doe     | john.doe |john.doe@email.com |  password  | 10/10/1970 | normal |

Тест на самом деле попадает в TEST env (поскольку я вставляю пользователя непосредственно с помощью сервиса, БЕЗ выполнения действия контроллера "postUserAction"), так что все идет хорошо.

Кто-нибудь знает, как использовать базу данных TEST всегда, а не только при использовании сервиса? Весь запрос POST завершается с ошибкой после первого (поскольку ограничение UNIQUE предотвращает вставку пользователя), поэтому тесты не пройдены.

Спасибо всем и дайте мне знать, если я что-то пропустил.

0 ответов

Другие вопросы по тегам