describe User do
it { should belong_to(:shop) }
it { should respond_to(:shop) }
it { should respond_to (:first_name)}
it { should respond_to (:last_name)}
it { should respond_to (:email)}
工作正常。但是一旦我补充道:
it { should validate_presence_of (:first_name)}
it { should validate_presence_of (:last_name)}
它打破了,特别是在这个回调方法中:
def get_url
source = "http://www.randomsite.com/"+ first_name + "+" + last_name
end
没有将nil隐式转换为+
的字符串
我该如何解决这个问题?
答案 0 :(得分:0)
您的first_name
和last_name
似乎是nil
进行测试。
尝试将before
块中的值存根,如下所示:
context 'first_name and last_name validation' do
before do
allow(subject).to receive(:first_name).and_return('bob')
allow(subject).to receive(:last_name).and_return('tom')
end
it { should validate_presence_of (:first_name)}
it { should validate_presence_of (:last_name)}
end
答案 1 :(得分:0)
嗯,这就是validate_presence_of(:first_name)
的工作原理:
nil
属性分配first_name
,并在您的模型上调用.valid?
。.valid?
返回true,则测试失败,因为如果您已经进行了正确的验证,那就不会发生。我认为get_url
方法设置为在before_validation
回调上运行,因此您的代码中发生了什么:
first_name
被分配到nil
。.valid?
被召唤。before_validation
回调会触发您的get_url
方法get_url
没有考虑first_name
可以是nil
。