我使用capybara进行一些网络自动化。 代码中有各种各样的内容,例如
raise_error 'Failed as this is a duplicate' if duplicate?
或
raise_error 'Failed to log in' if logged_in? == false
所有这些都被抽象为一个模块,我更喜欢该模块不依赖于模型中的任何东西。
我正在努力解决的问题是如何在我从模型外部运行错误文本时访问该错误文本。
即
Class Thing
has_many :notes
def do_something
@done = Module::Task.something(self.attribute)
if @done
self.update_attributes(status:'Done')
else
self.notes.new(text: error.text)
end
end
但我无法通过语法来获取错误文本。
答案 0 :(得分:1)
答案:如果我理解正确,那么在完成任务时出现的错误
@done = Module::Task.something(self.attribute)
可以通过@done.errors.messages
示例:如果我有用户模型,其中属性username
有2个验证:presence
和format
,则错误消息显示如下:
irb(main):019:0* u = User.new
irb(main):022:0* u.save # wont succeed
irb(main):028:0* u.errors.messages
=> {:uid=>["can't be blank", "is invalid"]}
如果您想使用 capybara 测试错误消息,那么您可以使用如下语法:
it 'raises jibberishh' do
expect{User.raise_error_method}.to raise_error("jibberishh")
end