如何在不同的数据库中正确运行测试


Laravel 5 how to run tests in a different database the right way?

我使用的是5.1版本,无法找到一个明确的答案,关于生态系统和测试系统使用单独数据库进行测试的最佳实践是什么

我:

  • 用于开发和运行本地测试的开发机器
  • 一个由CI运行的外部服务(只运行phpunit)

当我在本地运行测试时,我不希望它们干扰我的开发数据库,因此我为测试创建了专用数据库。

为了克服我只有一个.env文件的限制,我修改了phpunit.xml.dist文件,通过<env name="..." value=".."/>定义了不同的数据库凭据。

当我想在远程CI服务上运行测试时,我再次需要用户/通行证和数据库名称的不同值。在这种情况下,我在我的repo中有一个"模板phpunit.xml"文件,在远程CI的初始化阶段,我用它们各自的环境变量(与我使用的不同)生成它。

对于所有非生产相关的环境,我需要保持三个文件同步,否则事情会开始中断:

  • .env
  • phpunit.xml.dist
  • 远程CI系统按需生成的phpunit.xml模板文件

我理解非版本化.env的好处,但是总是保持这些东西同步是一个巨大的痛苦。

有更好的方法来管理这个吗?

对于我的例子,我在CI环境中生成了一个phpunit.xml(注意:没有.dist !),其中使用自定义bash脚本预先填充了特殊的<env>变量。

我也发现https://mattstauffer.co/blog/environment-specific-variables-in-laravels-testing-environment最近,但没有实现它