2

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

我在工作台包中工作

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

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

因为如果我这样做

public function setUp() {

    parent::setUp();

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

我收到一条错误消息,由于违反唯一键规则,无法插入模型。

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

4

1 回答 1

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

于 2013-07-24T10:19:22.017 回答