每次运行测试时,我的所有数据库表(除了migrations表)都会被删除,我必须再次运行迁移。例如,如果我有以下表格:
migrations
users
tableA
tableB
运行后:
phpunit—过滤用户可以查看记录viewrecordtests/feature/viewrecordtest.php
我的表被删除,最后只剩下迁移表。
我使用mysql作为数据库,根据我设置的配置,测试正在内存中运行:
数据库.php
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
//'database' => env('DB_DATABASE', database_path('database.sqlite')),
'database' => ':memory:',
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
'sticky' => true
],
]
phpunit.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite" />
<env name="DB_DATABASE" value=":memory:" />
</php>
</phpunit>
谢谢
3条答案
按热度按时间6uxekuva1#
一般来说,应该使用与staging env相同的表结构分离数据库。这是单元测试的正常行为(我的意思是删除表)。测试的典型流程是(对于每个测试执行):
删除所有表。
运行所有迁移(创建表、更改表等)。
装载固定装置
对新数据库执行测试。
想象一下这样的情况,其中一个测试更改了例如user表中的数据(更改email或first name等),如果phpunit不删除所有数据,下一个测试将处理不正确的数据(由另一个测试更改)。您可以查看laravel主文档以了解更多详细信息。
iaqfqrcu2#
在phpstorm中,michael ameyaw的解决方案对我很有效!谢谢您。
我想说的是,这也可能是缓存问题,所以请尝试以下方法:
vwhgwdsa3#
我有一个解决方案,如果您使用phpstorm,请寻找测试框架。
文件>>设置>>文件和框架>>测试框架。
在根文件夹中将默认配置文件设置为phpunit.xml