每次我运行测试时
php artisan test
当我想查看数据库中插入的数据时,表完全是空的。
这是我的测试
class ExampleTest extends TestCase
{
use RefreshDatabase;
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$ad = new Ad();
$ad->name = 'test';
$ad->price = 100000;
$ad->save();
$this->assertTrue($ad->id > 0);
var_dump($ad->id);
}
}
测试验证数据库是否生成好id,每次结果都是正确的。
从我的角度来看,特征 RefreshDatabase 会在每次测试之前刷新数据库,而不是之后……这怎么可能?
注意:我确信我正在检查正确的数据库,因为如果删除
use RefreshDatabase
我可以看到记录。
精度:
如果我使用
RefreshDatabase
代替DatabaseTransactions
,我可以在运行测试后看到记录。我无法理解它...
我假设您已经在使用
RefreshDatabase
。
首先要检查的是 phpunit.xml 文件及其数据库设置。它应该是一个内存数据库。
第二件事要检查您是否没有在开发环境中缓存配置。
首次运行
php artisan config:clear
仅一次。然后运行你的测试。
注意:不要缓存本地开发的配置。
将此添加到您的
phpunit.xml
文件
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
类似这样的:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
>
<testsuites>
<testsuite name="Unit">
<directory>tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory>tests/Feature</directory>
</testsuite>
</testsuites>
<source>
<include>
<directory>app</directory>
</include>
</source>
<php>
<env name="APP_ENV" value="testing"/>
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
<env name="MAIL_MAILER" value="array"/>
<env name="QUEUE_CONNECTION" value="sync"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="TELESCOPE_ENABLED" value="false"/>
</php>
</phpunit>