Laravel 4 PHPUnit Sqlite数据库,在每次测试前删除项目

时间:2013-07-24 08:35:21

标签: sqlite laravel phpunit laravel-4

我有一个配置了sqlite db的Laravel 4应用程序用于测试。

我正在使用工作台包

我在PHPUnit测试中测试模型时遇到问题,因为我在模型上定义了一些独特的属性。我从我的基础测试类中运行Artisan::call('migrate', array('--bench' => 'vendor/webshop'));,我从中扩展了其他测试。

我认为这会运行数据库迁移,但我认为它不会删除数据库中的模型。

因为如果我这样做

public function setUp() {

    parent::setUp();

    $this->order = Order::create(array(
        "uniquekey" = "123"
    ));
}

我收到错误消息,因为违反了唯一密钥规则而无法插入模型。

每次测试前我应该如何清理数据库?

1 个答案:

答案 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存储的内存,因此它很快 - 是的,测试也从空数据库开始。