使用rspec测试rails 3.2中的严格验证

时间:2012-07-10 22:58:17

标签: ruby-on-rails-3 rspec

在rspec中,如何测试哪个属性未通过严格验证。我只能测试是否抛出了“ActiveModel :: StrictValidationFailed”异常。

这是一个例子:

it "should not be valid if the asset already exists" do
     n = Factory.build( :private_attached_asset, :asset => Rack::Test::UploadedFile.new( "test.pdf", 'application/pdf' ))
     expect { n.save }.should raise_error(ActiveModel::StrictValidationFailed)
     #n.should have(1).error_on(:checksum)
 end

注释掉的行再次抛出异常。

1 个答案:

答案 0 :(得分:1)

您无法检查严格验证的错误消息,因为它们会立即引发并且不会设置errors对象。或者,您可以测试引发的确切错误消息:

expect { n.valid? }.to raise_error(ActiveModel::StrictValidationFailed, 'Exact message thrown')