Php 在测试期间重置Laravel中数据库中的记录,但不重置数据库本身

Php 在测试期间重置Laravel中数据库中的记录,但不重置数据库本身,php,laravel,unit-testing,Php,Laravel,Unit Testing,我现在正在测试我的Laravel应用程序,并面临下一个问题:我的项目是从一个没有框架的PHP项目迁移而来的,该项目已经有了自己的数据库,因此我没有迁移大多数数据库数据。在测试期间,我需要刷新我的数据库,但就我现在而言,当我使用使用RefreshDatabase时我的整个数据库都在刷新(因此表也被删除),所以laravel假设,我每次都在迁移我的db表,而我没有这么做。所以问题是:每个新测试是否可能只刷新记录(我的意思是删除记录),而不刷新整个数据库?我在谷歌上搜索了一下,不幸的是没有找到一些可能

我现在正在测试我的Laravel应用程序,并面临下一个问题:我的项目是从一个没有框架的PHP项目迁移而来的,该项目已经有了自己的数据库,因此我没有迁移大多数数据库数据。在测试期间,我需要刷新我的数据库,但就我现在而言,当我使用
使用RefreshDatabase时我的整个数据库都在刷新(因此表也被删除),所以laravel假设,我每次都在迁移我的db表,而我没有这么做。所以问题是:每个新测试是否可能只刷新记录(我的意思是删除记录),而不刷新整个数据库?我在谷歌上搜索了一下,不幸的是没有找到一些可能有用的东西。提前谢谢

如果您使用的是
Phpunit
您可以使用
DatabaseTransactions
它会将您在测试中添加的内容添加到数据库中,然后将其删除。就像使用它一样

如果您不想创建测试db,可以这样简单:

<?php

use Illuminate\Foundation\Testing\DatabaseTransactions;

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>


您可以创建一个
Trait
截断
所有数据库表,以便进行测试。作为参考,请勾选以下答案:谢谢,我想是这样。不客气,只需将其标记为答案,谢谢@汉德科克