在我的RSpec user_spec.rb
中,我的一个FactoryGirl工厂似乎有效,我可以在其上调用should be_valid
,此测试将通过(如果我在工厂中放入一个空字符串将会中断{{ 1}})。
user_name
但是,当我在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
无效。这就是我在工厂里的所有内容.rb:
user_name
我的用户模型:
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
?
我真的很感激任何帮助!我正在运行Rails 4,NoMethodError
和gem "rspec-rails", "~> 2.14.1"
试图将这个问题困惑一段时间但没有成功......
答案 0 :(得分:3)
在should_not
和be_valid
之间使用空格:
FactoryGirl.build(:user, :user_name => nil).should_not be_valid