【问题标题】:Using DataBase Cleaner gem with DataMapper将 DataBase Cleaner gem 与 DataMapper 一起使用
【发布时间】:2013-08-22 05:13:43
【问题描述】:

我正在使用 RSpec 和 FactoryGirl 编写测试。在我的模型中使用了 DataMappers。在 RSpec 中,我正在测试我的控制器的两个方法更新和索引函数,其中我使用两个对象 A、B 和 C。我使用 FactoryGirl 创建了它们,如下所示:

before(:each) do
  @A = FactoryGirl.create(:A)
  @B = FactoryGirl.create(:B)
  @C = FactoryGirl.create(:C)
end

现在我想在每次测试后使用 DataBase Cleaner Gem 清理它们。我在 Google 中搜索过它,但大多数文章都讨论了如何将 DataBase Cleaner Gem 与 A​​ctiveRecord 一起使用,但没有一篇文章明确说明如何将 DataBaseCleaner gem 与 DataMapper 一起使用。因此,如果有人给我使用 DataMapper 的带有 DataBase 清洁器的 RSpec 文件的小示例,我将不胜感激。提前致谢。

【问题讨论】:

  • 但是当您按照示例中所示的常规方式实现它时会发生什么?理论上它应该支持 DataMapper 的事务和截断策略。

标签: ruby-on-rails factory-bot rspec-rails ruby-datamapper database-cleaner


【解决方案1】:

首先确保您的 Gemfile 和 database_cleaner 中有 dm-transactions,并且在您的规范助手中都需要:

require 'dm-transactions'
require 'database_cleaner'

然后你只需要配置 DatabaseCleaner 来使用 DataMapper 在你的 spec helper 中使用以下行:

DatabaseCleaner[:data_mapper].strategy = :transaction

您现在可以在规范中使用与此类似的内容,让 DatabaseCleaner 知道事务何时开始以及何时清理:

before :each do
  DatabaseCleaner.start
end

after :each do
  DatabaseCleaner.clean
end

有关 DatabaseCleaner 自述文件的更多详细信息:https://github.com/bmabey/database_cleaner

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多