使用 raise_error 的结果(水豚)
Using result of raise_error (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
但我无法计算出获取该错误文本的语法。
回答:如果我理解正确,那么在完成任务时出现的错误
@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
我正在使用水豚做一些网络自动化。 代码中有很多地方说的是
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
但我无法计算出获取该错误文本的语法。
回答:如果我理解正确,那么在完成任务时出现的错误
@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