DatabaseCleaner + RSpec:正确的配置是什么?

Kir*_*rat 21 rspec ruby-on-rails rspec-rails ruby-on-rails-4 database-cleaner

database_cleaner在我的rails应用程序中包含了gem.遵循git repo上给出的示例,并包含以下代码spec_helper :

方法1

  config.before(:suite) do
   DatabaseCleaner.strategy = :transaction
   DatabaseCleaner.clean_with(:truncation)
  end

  config.around(:each) do |example|
   DatabaseCleaner.cleaning do
    example.run
   end
  end
Run Code Online (Sandbox Code Playgroud)

当我运行rspeci get错误时NoMethodError:undefined method 'cleaning' for DatabaseCleaner:Module.

所以我做了一些研究,发现我可以用以下内容替换config.around上面的块:

方法2

config.before(:each) do
 DatabaseCleaner.start
end

config.after(:each) do
 DatabaseCleaner.clean
end 
Run Code Online (Sandbox Code Playgroud)

要么

方法3

config.around(:each) do |example|
  DatabaseCleaner.start
  example.run
  DatabaseCleaner.clean
end
Run Code Online (Sandbox Code Playgroud)

方法2和方法3都运行良好.
我还查看了database_cleaner的git repo,发现该cleaning方法实际存在,并使用以下代码:

def cleaning(&block)
     start
     yield
     clean
   end
Run Code Online (Sandbox Code Playgroud)

这与我在例子3中所做的完全相同.如果确实存在那么为什么它不可访问?我在这里错过了一些东西.还有更多设置?或者方法2或3更好?

Kir*_*rat 25

终于找到了答案,

database_cleanergem cleaning刚刚在上周添加了该方法,并且还更新了相同的文档.但是这个更改不适用于我从rubygems.org采购的最新gem版本1.2.0.Approach 1当我从github下面获取宝石时,效果非常好:

gem 'database_cleaner', git: 'git@github.com:DatabaseCleaner/database_cleaner.git'
Run Code Online (Sandbox Code Playgroud)