Rspec SimpleCov NoMethodError

时间:2013-09-11 19:18:12

标签: ruby-on-rails ruby rspec ruby-on-rails-4 simplecov

通过rake运行我的rails 4 rspec套件时一切正常但在尝试运行rake simplecov时,我发现数百个失败,只有NoMethodError类似:

  1) Answer Validations
     Failure/Error: it { should validate_presence_of :text }
     NoMethodError:
       undefined method `validate_presence_of' for #<RSpec::Core::ExampleGroup::Nested_16::Nested_1:0x007faf9fb5b7c8>
     # ./spec/models/answer_spec.rb:12:in `block (3 levels) in <top (required)>'

有关为何发生这种情况的任何线索?我还要提一下,我正在使用sqlite3 :memory:进行测试。

1 个答案:

答案 0 :(得分:1)

shoulda库未包含在您的simplecov运行中。

easycov可能在不同于:test的环境中运行吗?如果它只在Gemfile中的:test组中,那么可能会导致不加载shoulda gem。

您如何在spec_helper中包含simplecov?像这样的东西?

require 'simplecov'
require 'simplecov-rcov'
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
SimpleCov.start 'rails' if ENV['COVERAGE']

作为spec_helper.rb

第一行

你的Gemfile中有这样的东西吗?

group :test, :development do
  ...
  gem 'rspec-rails', '~> 2.0'
  gem 'shoulda-matchers'
end

group :test do
  gem 'simplecov'
  gem 'simplecov-rcov'
end

然后执行它?

$ COVERAGE=true bundle exec rake spec

在许多项目中,这个配方对我来说非常有效。根据您的目的,RCov格式化程序可能并不重要。