用phpunit和doctrine测试symfony restful api

Jen*_*tel 2 rest phpunit doctrine symfony

我正试图为我的RESTful api函数提取一些测试.

为此,我做了以下事情:

  • 安装了PHPUnit.
  • 创建了一个用于测试的新数据库.
  • 创建了一个新的环境(测试)并更改了它的doctrine配置.
  • 创建了一个测试.

我的问题是:

执行请求时(somedomain.com/api/somemethod) - >请求的页面不知道我正在对它执行测试 - >所以它使用的数据是生产/开发数据库而不是'test'db我已经为测试创建了.

(该脚本使用测试db,请求的页面使用正常配置).

有没有办法在不触及或修改API代码/行为的情况下解决它?

谢谢.

Igo*_*vić 5

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

Symfony易于测试,您无需发出真正的 HTTP请求即可执行功能测试.相反,它将创建一个请求对象并告诉它的内核来处理它,就像它来自真实客户端一样.

symfony书中有一章关于此:功能测试

如果你使用那里描述的方法(使用Symfony BrowserKit客户端和路径而不是完整的URL),Symfony将在测试环境中启动它的内核,并将处理这样的请求.

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