【问题标题】:Laravel 4 PHPUnit Sqlite Database, delete items before every testLaravel 4 PHPUnit Sqlite 数据库,每次测试前删除项目
【发布时间】:2013-07-23 15:05:51
【问题描述】:

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

我在工作台包中工作

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

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

因为如果我这样做了

public function setUp() {

    parent::setUp();

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

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

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

【问题讨论】:

  • 我只是通过 $this->order->forceDelete(); 删除我的模型,但这并不是解决问题的真正方法

标签: sqlite laravel phpunit laravel-4


【解决方案1】:

您应该为测试目的定义环境。

实际上,Laravel 确实为您准备了一个 - 请注意您的 app/config 中的 testing 文件夹。

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

【讨论】:

猜你喜欢
  • 2012-01-05
  • 2019-02-08
  • 2011-10-17
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2011-06-10
  • 2013-04-13
相关资源
最近更新 更多