我有一个配置了sqlite db的Laravel 4应用程序用于测试。
我正在使用工作台包
我在PHPUnit测试中测试模型时遇到问题,因为我在模型上定义了一些独特的属性。我从我的基础测试类中运行Artisan::call('migrate', array('--bench' => 'vendor/webshop'));
,我从中扩展了其他测试。
我认为这会运行数据库迁移,但我认为它不会删除数据库中的模型。
因为如果我这样做
public function setUp() {
parent::setUp();
$this->order = Order::create(array(
"uniquekey" = "123"
));
}
我收到错误消息,因为违反了唯一密钥规则而无法插入模型。
每次测试前我应该如何清理数据库?
答案 0 :(得分:3)
您应该为测试目的定义环境。
实际上Laravel确实有一个 - 请注意testing
内的app/config
文件夹。
创建app/config/testing/database.php
(或修改,如果存在)并将其放置:
return array(
'default' => 'sqlite',
'connections' => array(
'sqlite' => array(
'driver' => 'sqlite',
'database' => ':memory:', // this will do the trick ;)
'prefix' => '',
),
),
);
当您运行测试时,Laravel将其环境设置为“自动测试” - 无需使用此功能。 SQLite内存数据库是用RAM存储的内存,因此它很快 - 是的,测试也从空数据库开始。