[UPDATE]测试似乎可以在内存中找到,如果我使用查询生成器(即DB::table()),但在使用Eloquent时使用主表。
我遵循以下2个教程来进行内存测试:
testing-like-a-boss-in-laravel-models
laravel-setting-up-an-in-memory-test-database
我首先尝试迁移/播种一个表,不存在于我的主mysql数据库。一切都很好,表没有在mysql中创建,测试断言成功。
然后我尝试用一个真实的表迁移/播种/内存测试,发现它在我的主mysql数据库中播种。
新尝试的内存测试。需要帮助吗?1. 不知道为什么我的主数据库被碰了。2. 如何验证内存中的db是否已填充?有办法浏览一下吗?
主要步骤如下:
在app/config/测试/database.php
'default' => 'testing',
'testing' => array(
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
)
在phpunit.xml中添加:
<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="testing"/>
</php>
TestCase类中的:
public function createApplication()
{
$unitTesting = true;
$testEnvironment = 'testing';
return require __DIR__.'/../../bootstrap/start.php';
}
在我的测试类:
public function setUp()
{
parent::setUp();
Artisan::call('migrate');
Artisan::call('db:seed', ['--class' => 'DatabaseSeeder', '--database' => 'testing']);
}
function setUp()
在每次测试之前运行。如果你检查你的setUp
,你可以看到一个迁移和一个种子。如果你在你的设置中删除Artisan::call('db:seed)
,你的数据库将在你的类的每次测试中没有种子数据。
然后,这是你的新代码:
public function setUp()
{
parent::setUp();
Artisan::call('migrate');
// Artisan::call('db:seed', ['--class' => 'DatabaseSeeder', '--database' => 'testing']);
}