当我在Rails功能测试中运行帖子时
setup do
post :create, :user => Factory.attributes_for(:user)
end
它失败了,我没有得到任何关于为什么的反馈。我知道它失败了,因为我断言确保数据库中有一条额外的记录失败。
我试着做
setup do
post :create, :user => Factory.attributes_for(:user)
assert_valid @controller.object
end
但是对象是受保护的方法。
如何检查由调用后调用产生的模型对象上的错误?
我正在使用Shoulda和Factory Girl,但我怀疑这并不重要。
答案 0 :(得分:6)
添加以下断言:
assert_nil assigns(:user).errors
如果保存对象时出错(可能是验证),则会失败,并显示错误对象的值。
答案 1 :(得分:0)
我正在使用rails 3.2.13,似乎assert_nil无法正常工作,如上一个答案中所述。
这对我有用:
assert_empty assigns(:user).errors
我相信这是因为即使成功的“保存”调用也会返回一个ActiveRecord:Errors对象,其中包含一个空的哈希“messages”,所以你也可以这样做:
assert_empty assigns(:user).errors.messages