我正在使用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
当我尝试运行一个向服务器发出POST HTTP请求(使用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请求通过Controller(显然),然后命中服务以在DEV数据库中创建用户(而不是使用最近清理的TEST DDBB)
当我使用TableNode数据运行GET场景时:
| name | lastname| username | email | password |birth | type|
| John | Doe | john.doe |john.doe@email.com | password | 10/10/1970 | normal |
测试实际上达到了测试环境(因为我直接使用服务插入用户,没有通过Controller操作“postUserAction”)所以一切顺利。
有没有人知道如何使用TEST数据库,而不仅仅是在使用服务时?所有POST请求在第一个之后失败(因为UNIQUE约束阻止用户插入),因此测试失败。
感谢大家,如果我错过了什么,请告诉我。