我在 Shoulda Matchers 中做错了什么?
What am I doing wrong in Shoulda Matchers?
在 gem 文件中我这样写:
group :test do
gem 'rspec-rails'
gem 'shoulda-matchers', require: false
gem 'factory_girl'
end
我的rails_helper
require 'rspec/rails'
require 'shoulda/matchers'
我的spec_helper
require 'rails_helper'
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.include FactoryGirl::Syntax::Methods
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
Shoulda::Matchers.configure do |config|
config.integrate do |with|
# Choose a test framework:
with.test_framework :rspec
# Choose one or more libraries:
with.library :active_record
with.library :active_model
with.library :action_controller
end
end
最后是我的测试:
require 'spec_helper'
describe Person do
it {should validate_presence_of(:identifier)}
end
我得到了 nomethoderror
Failure/Error: it {should validate_presence_of(:identifier)}
NoMethodError:
undefined method `validate_presence_of' for #<RSpec::ExampleGroups::Person:0x007fe58d13ca20>
我就是不明白。在其他项目中以同样的方式工作。这里没有。我花了两天时间来解决这个问题。在 rails 中是否有更好的 Shoulda Matchers 替代品?
更改您的 Gemfile 以使用两个不同的组进行测试,如下所示:
group :test, :development do
gem 'rspec-rails'
gem 'factory_girl'
end
group :test do
gem 'shoulda-matchers', require: false
end
这个曾经是在shoulda
加载Test::Unit而不是RSpec时引起的,但我认为这是固定的。
抱歉,您遇到了问题。在需要 shoulda-matchers 之前,你需要加载 Rails。 gem 只有在发现 ActiveRecord 可用时才会使模型匹配器可用;如果没有,那么您将不会得到它们。
您似乎调换了 rails_helper 和 spec_helper。通常在安装了 rspec-rails 的新项目中,rails_helper 将加载 Rails,然后需要 spec_helper。我会删除这两个文件(或将它们移到一边,以便您仍然拥有它们),然后重新 运行 rails g rspec:install
重新生成它们。你仍然想像你所做的那样将 shoulda-matchers 配置块添加到 rails_helper,但到那时应该加载 ActiveRecord(以及 Rails 的其余部分)。
在 gem 文件中我这样写:
group :test do
gem 'rspec-rails'
gem 'shoulda-matchers', require: false
gem 'factory_girl'
end
我的rails_helper
require 'rspec/rails'
require 'shoulda/matchers'
我的spec_helper
require 'rails_helper'
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.include FactoryGirl::Syntax::Methods
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
Shoulda::Matchers.configure do |config|
config.integrate do |with|
# Choose a test framework:
with.test_framework :rspec
# Choose one or more libraries:
with.library :active_record
with.library :active_model
with.library :action_controller
end
end
最后是我的测试:
require 'spec_helper'
describe Person do
it {should validate_presence_of(:identifier)}
end
我得到了 nomethoderror
Failure/Error: it {should validate_presence_of(:identifier)}
NoMethodError:
undefined method `validate_presence_of' for #<RSpec::ExampleGroups::Person:0x007fe58d13ca20>
我就是不明白。在其他项目中以同样的方式工作。这里没有。我花了两天时间来解决这个问题。在 rails 中是否有更好的 Shoulda Matchers 替代品?
更改您的 Gemfile 以使用两个不同的组进行测试,如下所示:
group :test, :development do
gem 'rspec-rails'
gem 'factory_girl'
end
group :test do
gem 'shoulda-matchers', require: false
end
这个曾经是在shoulda
加载Test::Unit而不是RSpec时引起的,但我认为这是固定的。
抱歉,您遇到了问题。在需要 shoulda-matchers 之前,你需要加载 Rails。 gem 只有在发现 ActiveRecord 可用时才会使模型匹配器可用;如果没有,那么您将不会得到它们。
您似乎调换了 rails_helper 和 spec_helper。通常在安装了 rspec-rails 的新项目中,rails_helper 将加载 Rails,然后需要 spec_helper。我会删除这两个文件(或将它们移到一边,以便您仍然拥有它们),然后重新 运行 rails g rspec:install
重新生成它们。你仍然想像你所做的那样将 shoulda-matchers 配置块添加到 rails_helper,但到那时应该加载 ActiveRecord(以及 Rails 的其余部分)。