DatabaseCleaner + RSpec:正确的配置是啥?
Posted
技术标签:
【中文标题】DatabaseCleaner + RSpec:正确的配置是啥?【英文标题】:DatabaseCleaner + RSpec : what is the correct configuration?DatabaseCleaner + RSpec:正确的配置是什么? 【发布时间】:2014-02-24 23:14:15 【问题描述】:我在我的 rails 应用程序中加入了 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
块:
方法二
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
或
方法 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 更可取?
【问题讨论】:
【参考方案1】:终于找到答案了,
database_cleaner
gem 上周刚刚添加了cleaning
方法,并更新了相同的文档。但我从 rubygems.org 获取的最新 gem 版本 1.2.0 中没有此更改。当我从 github
获取 gem 时,Approach 1
完美运行,如下所示:
gem 'database_cleaner', git: 'git@github.com:DatabaseCleaner/database_cleaner.git'
【讨论】:
【参考方案2】:如果你从 Github 拉出 gem,你可以使用文档中的方法
gem 'database_cleaner', git: 'git@github.com:bmabey/database_cleaner.git'
【讨论】:
这就是我为它工作所做的。检查我上面的答案。 我知道。刚刚为懒惰的人提取了实际的 Gemfile 条目;)【参考方案3】:如果您在使用 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
您的测试现在应该可以正常结束了。
【讨论】:
以上是关于DatabaseCleaner + RSpec:正确的配置是啥?的主要内容,如果未能解决你的问题,请参考以下文章
SystemStackError - 堆栈级别太深;在 Rspec 测试中,使用acts_as_audited、Rspec、数据库清理器
Rails RSpec 测试 has_many :through 关系
我无法使用 'bundle exec rspec' 执行 rspec