我现在正在测试我的Laravel应用程序并面临下一个问题:我的项目是从无框架PHP项目迁移而来的,该项目已经拥有自己的数据库,因此我没有大多数数据库数据的迁移。在测试期间,我需要刷新我的数据库,但就我现在而言,当我使用use RefreshDatabase;
时,我的整个数据库都在刷新(所以表也被删除了(,所以 laravel 假设,我每次都在迁移我的数据库表,我没有做什么。所以问题是:每个新测试是否可以只刷新记录(我的意思是删除它们(,而不是整个数据库?我已经用谷歌搜索了一下,不幸的是没有找到一些东西,这可能会有所帮助。提前感谢!
如果您使用的是Phpunit
则可以使用DatabaseTransactions
它会将您在测试中添加的内容添加到数据库中,然后删除它。只是像特质一样使用它。
如果您不想创建测试数据库,则可以轻松实现如下:
<?php
use IlluminateFoundationTestingDatabaseTransactions;
class ExampleTest extends TestCase
{
use DatabaseTransactions;
...
您可以在文档中找到有关此内容的更多信息。
您必须在内存上设置测试数据库,这样它就不会影响每个测试的主数据库。 只需更改 phpunit.xml 文件,如下所示:
<php>
<env name="APP_ENV" value="testing"/>
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="MAIL_DRIVER" value="array"/>
</php>
您需要为测试设置不同的环境。 请看这个。 https://laravel.com/docs/5.8/testing#environment 当您测试代码时,测试将在测试环境中完成
我想您需要迁移才能运行旧的数据库字段。