如何使用 Doctrine Fixture 加载测试数据库进行 PHP 单元测试?
Posted
技术标签:
【中文标题】如何使用 Doctrine Fixture 加载测试数据库进行 PHP 单元测试?【英文标题】:How to use Doctrine Fixture to load test database for PHP unit testing? 【发布时间】:2020-11-01 06:53:01 【问题描述】:我正在尝试设置一个数据库环境来测试我的 Doctrine ORM 实体类,而不更改我的真实数据库。
我关注了Symfony's documentation,但是当我运行php bin/console doctrine:fixtures:load
时,我收到了警告:
小心,数据库“图表”将被清除。你想继续吗? (是/否)[否]:
尽管我已经在我的.env.test
文件中设置了一个环境变量:
DATABASE_URL=mysql://testUser:testPassword@127.0.0.1/graph_test
编辑:这是整个.env.test
文件:
# define your env variables for the test env here
KERNEL_CLASS='App\Kernel'
APP_SECRET='$ecretf0rt3st'
SYMFONY_DEPRECATIONS_HELPER=999999
PANTHER_APP_ENV=panther
# Database test
DATABASE_URL=mysql://testUser:testPassword@127.0.0.1/graph_test
我尝试更改我的 test/bootstrap.php
文件,但收到相同的警告。
有没有办法告诉教义从.env.test
文件中获取DATABASE_URL
值?任何帮助将不胜感激。
PS 不需要多个测试 .env 文件。
【问题讨论】:
请提供您的 .env.test 文件(去掉凭据),也许您应该使用.env.local
?什么时候在本地调试?
也许我将来会这样做,现在我只进行本地测试。
尝试将 .env.test 重命名为 .env.local 以确保它被使用。正如 symfony 文档指出的那样,如果您想使用自定义(在您的情况下为“测试”环境),则需要额外的步骤。默认使用.env.local
。 symfony.com/doc/current/…
试试php bin/console doctrine:fixtures:load --env=test
如果您接受,我会将其作为答案发布。
【参考方案1】:
doctrine 测试包括运行迁移,以便在每次测试运行时在数据库中拥有相同的数据。
从您发布的页面...
Resetting the Database Automatically Before each Test¶
这将导致消息Careful, database ... will be purged.
这是警告,而不是错误。
【讨论】:
但我不希望我的真实数据库和我的测试数据库相同。我希望真实数据库保持不变,但在每次测试之前重置 test 数据库。【参考方案2】:当您要加载配置时,请确保它在 .env.local 中定义,或者如果您使用的是 test
等自定义环境,请将 --env=test
参数添加到您的命令中
php bin/console doctrine:fixtures:load --env=test
php bin/console server:run --env=test
【讨论】:
【参考方案3】:如果您使用php bin/console doctrine:fixtures:load --env=test
,您只会影响您的测试数据库。
【讨论】:
以上是关于如何使用 Doctrine Fixture 加载测试数据库进行 PHP 单元测试?的主要内容,如果未能解决你的问题,请参考以下文章