В моем RSpec user_spec.rb
один из моих FactoryGirl заводов, кажется действительным, и я могу назвать should be_valid
на него, и этот тест будет проходить (и сломается, если я ставлю пустую строку на заводе user_name
).RSpec NoMethodError при вызове should_not_be_valid на FactoryGirl.build
describe User do
it "has a valid factory" do
# should be_valid works fine
FactoryGirl.create(:user).should be_valid
end
it "is invalid without a name" do
# should_not_be_valid throws a NoMethodError
FactoryGirl.build(:user, :user_name => nil).should_not_be_valid
end
end
Однако, когда я называю выше should_not_be_valid
на FactoryGirl.build
, тест не пройден:
1) User is invalid without a name
Failure/Error: FactoryGirl.build(:user, :user_name => nil).should_not_be_valid
NoMethodError:
undefined method `should_not_be_valid' for #<User id: nil, user_name: nil, created_at: nil, updated_at: nil>
# ./spec/models/use
Когда вместо этого следует пройти, так как пустой user_name
является недействительным. Вот что у меня в factories.rb:
FactoryGirl.define do
factory :user do
user_name "Foo Bar"
end
end
И моя модель пользователя:
class User < ActiveRecord::Base
has_one :musician
validates :user_name, presence: true
end
Как мог should be_valid
работать, но should_not_be_valid
бросает NoMethodError
?
Я бы очень признателен за любую помощь! Я бегу Rails 4, gem "rspec-rails", "~> 2.14.1"
и gem 'factory_girl_rails', '4.3.0'
пытался разгадать этот на некоторое время без успеха ...
Спасибо, что было Это. Ошибка синтаксиса в результате оптической иллюзии? Я не вижу этого недостающего подчеркивания, если я не окажусь в краю глаза ... –