symfony2 behat / mink HTTP POST没有使用测试env数据库

时间:2015-09-25 12:11:40

标签: php symfony functional-testing behat mink

我正在使用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约束阻止用户插入),因此测试失败。

感谢大家,如果我错过了什么,请告诉我。

0 个答案:

没有答案