2014-02-11 7 views
0

В моем 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'

пытался разгадать этот на некоторое время без успеха ...

ответ

3

Используйте пространство между should_not и be_valid:

FactoryGirl.build(:user, :user_name => nil).should_not be_valid 
+0

Спасибо, что было Это. Ошибка синтаксиса в результате оптической иллюзии? Я не вижу этого недостающего подчеркивания, если я не окажусь в краю глаза ... –

Смежные вопросы