为什么帖子在我的Rails功能测试中失败了?

时间:2009-04-08 01:41:46

标签: ruby-on-rails testing

当我在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,但我怀疑这并不重要。

2 个答案:

答案 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