我有这个Rails模型:
class Profile < ActiveRecord::Base
validates :number_format, :inclusion => { :in => ["1,000.00", "1.000,00"] }
def number_format=(format)
self.currency_delimiter = format[1]
self.currency_separator = format[5]
end
def number_format
"1#{currency_delimiter}000#{currency_separator}00"
end
end
问题在于,当我用RSpec测试时......
it "is invalid without a number_format" do
expect(FactoryGirl.build(:profile, :number_format => nil).errors_on(:number_format).size).to eq(1)
end
...我收到此错误:
1)没有number_format,配置文件number_format无效 失败/错误:期望(FactoryGirl.build(:profile,:number_format =&gt; nil).errors_on(:number_format).size).to eq(1)
expected: 1 got: 0
这怎么可能?
由于我采用的验证方法,我认为nil
无法验证。
答案 0 :(得分:1)
FactoryGirl.build
只是初始化一条记录,它不会尝试将记录保存到数据库中,因此不会在记录上调用valid?
。如果不调用valid?
,实例错误将始终为空。
请改为尝试:
it "is invalid without a number_format" do
profile = FactoryGirl.build(:profile, :number_format => nil)
expect(profile).to_not be_valid # `be_valid` actually calls `valid?`
expect(profile.errors_on(:number_format).size).to eq(1)
end
答案 1 :(得分:0)
如果您使用的是虚拟属性,我认为错误会保存到:base
。您应该检查expect(FactoryGirl.build(:profile, :number_format => nil).errors.size).to eq(1)
。