使用phpunit和条令测试symfony restful api

使用phpunit和条令测试symfony restful api,rest,symfony,doctrine,phpunit,Rest,Symfony,Doctrine,Phpunit,我正在尝试对我的RESTful api函数进行一些测试 为此,我做了以下工作: 安装了PHPUnit 为测试创建了一个新的数据库 创建了一个新环境(测试)并更改了它的条令配置 创建了一个测试 我的问题是: 执行请求时(somedomain.com/api/somemethod)->请求的页面不知道我正在对其执行测试->因此它使用的数据是生产/开发数据库,而不是我为测试创建的“测试”数据库 (脚本使用测试数据库,请求的页面使用正常配置) 有没有一种方法可以在不接触或修改API代码/行为的情况下

我正在尝试对我的RESTful api函数进行一些测试

为此,我做了以下工作:

  • 安装了PHPUnit
  • 为测试创建了一个新的数据库
  • 创建了一个新环境(测试)并更改了它的条令配置
  • 创建了一个测试
我的问题是:

执行请求时(somedomain.com/api/somemethod)->请求的页面不知道我正在对其执行测试->因此它使用的数据是生产/开发数据库,而不是我为测试创建的“测试”数据库

(脚本使用测试数据库,请求的页面使用正常配置)

有没有一种方法可以在不接触或修改API代码/行为的情况下解决此问题


谢谢。

既然你说你在请求
somedomain.com
,我只能怀疑你在通过HTTP发送请求

Symfony易于测试,您可以执行功能测试,而无需发出真实的HTTP请求。相反,它将生成一个请求对象,并告诉它的内核处理它,就像它来自真实的客户机一样

symfony的书中有一章是关于这一点的:

若您使用这里描述的方法(使用Symfony BrowserKit客户端和路径而不是完整的URL),Symfony将在测试环境中引导其内核,并将处理类似的请求

但是,如果出于任何原因,您不能/不想这样做,并且想要发出真正的HTTP请求,我建议您在
web
目录中创建一个名为app\u test.php的文件。在该文件中,您应该在test环境中引导内核,并确保您的测试实际命中了该文件(而不是
app.php
app_dev.php
)。但是,请记住,此文件将是公开的,因此,它将导致一个安全漏洞,因此请确保以某种方式对其进行保护(查看
app_dev.php
以获取提示)。作为一个想法,您可以要求在请求头中提供特定的密钥以允许它传递。或者,如果它将在一台机器上进行测试,您也可以通过IP或任何适合您的情况的方式来保护它