我在symfony学习功能测试,并且它真的很成功,但我在数据库中遇到了问题。在我的系统中,我有2个数据库,示例数据库和sample_test数据库。示例数据库用于生产,sample_test用于测试功能测试。我在sample_test中有空数据。在我的config_test.yml中。
doctrine:
# ...
dbal:
host: 127.0.1.1
dbname: sample_test
user: root
password: null
如果我加载我的夹具。它已成功添加到我的sample_test数据库中。在对我的代码进行功能测试时。如何将其连接到我的sample_test数据库?就像这段代码一样
public function testAddPatient(){
$values = array(
'patient' => array(
'company' => 1,
'profile' => array(
'firstName' => 'John',
'lastName' => 'Funtional test',
'email' => 'email123@gmail.com',
'gender' => 1,
'address' => array(
'street' => 'test functional street',
'zipCode' => 122,
'city' => 367,
'state' => 194,
'country' => 235
)
),
'medicalProfile' => array(
'policyNumber' => 11
)
)
);
$this->client->request('POST', '/api/v1/patients', $values, array(), array( 'CONTENT_TYPE' => 'application/json'));
$this->assertEquals(
Response::HTTP_OK,
$this->client->getResponse()->getStatusCode()
);
}
当我添加患者时。它应该添加到我的sample_test数据库中而不是样本数据库中。我是否想念我的数据库或配置设置?这是我现在完成项目的最后一步。
当我运行命令phpunit
时,它不会添加到sampte_test数据库
其他信息:
这就是我的设置 我复制app_dev.php并将其转换为app_test.php。我对该文件做了一些更改。我导出示例数据库中的数据和结构,并将其导入sample_test数据库。 注意:我在oath_clients表中编辑redirect_uris,只需将dev替换为test即可。在我的webtestcase控制器中,我有这个代码
public function setUp()
{
$this->client = static::createClient(array(),
array(
'PHP_AUTH_USER' => self::USERNAME,
'PHP_AUTH_PW' => self::PASSWORD
));
}
因为用户名和密码现在是我的sample_test数据库。当我运行phpunit。它现在有效。
答案 0 :(得分:1)
在web
目录中,您可以找到来自2个环境的访问文件,prod(app.php),dev(app_dev.php)
如果你想要config_test.yml应用,你应该创建第三个env文件app_test.php,它将通过' test'进入AppKernel对象
您也可以在dev env上执行此操作,但是您应该在每个功能测试中添加一些http标头,让symfony知道它的测试和切换数据库(但正如我所说,第一个选项应该完成这项工作)
答案 1 :(得分:0)
它应该按预期方式开箱即用,因为Symfony WebTestCase
创建的内核默认加载了env = test。
您可以使用options
的{{1}}参数或设置环境变量手动覆盖环境。请参阅:https://github.com/symfony/framework-bundle/blob/master/Test/KernelTestCase.php#L82
您应该检查WebTestCase::createClient()
来电。还要尝试明确设置env:
createClient()
进一步调查:
找出控制器内部使用的env。使用调试器或打印出$client = static::createClient(array(
'environment' => 'test',
'debug' => false,
));
如果您在$this->container->get('kernel')->getEnvironment();
:检查您的数据库查询。他们是否在dev