我在我的rails app中加入了database_cleaner
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
当我运行rspec
时,我收到的错误为NoMethodError:undefined method 'cleaning' for DatabaseCleaner:Module
。
所以我做了一些研究,发现我可以用以下内容替换上面的config.around
块:
方法2
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
OR
方法3
config.around(:each) do |example|
DatabaseCleaner.start
example.run
DatabaseCleaner.clean
end
方法2和方法3都运作良好
我还查看了database_cleaner的git repo,发现cleaning
方法确实存在并且使用以下代码:
def cleaning(&block)
start
yield
clean
end
这与我在示例3中所做的完全相同。如果确实存在,那么为什么它不可访问?我在这里错过了一些东西。还有更多设置? 或者是方法2或3更好?
答案 0 :(得分:25)
终于找到了答案,
database_cleaner
gem刚刚在上周添加了cleaning
方法,并且还更新了相同的文档。但是这个更改不适用于我从rubygems.org采购的最新gem版本1.2.0。当我从Approach 1
获取宝石时,github
完美无缺,如下所示:
gem 'database_cleaner', git: 'git@github.com:DatabaseCleaner/database_cleaner.git'
答案 1 :(得分:1)
如果从Github中提取gem,可以使用文档中的方法
gem 'database_cleaner', git: 'git@github.com:bmabey/database_cleaner.git'
答案 2 :(得分:-1)
如果您使用mongoid遇到同样的问题,可以将其添加到Gemfile,更改版本以适合您,并运行bundle install。
gem 'database_cleaner', '~> 1.4.1'
然后在
中创建一个支持文件夹spec/support/database_cleaner.rb
在spec_helper文件中需要database_cleaner.rb,我使用gem 'require_all'
,如下所示:
# spec/spec_helper.rb
require 'require_all'
require_rel 'support'
将以下清洁工具添加到database_cleaner.rb
RSpec.configure do |config|
# Cleanup the DB in between test runs
config.before(:suite) do
DatabaseCleaner[:mongoid].strategy = :truncation
DatabaseCleaner[:mongoid].clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
现在你的测试应该正确拆除。