使用 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 个验证:presenceformat 那么错误消息显示如下:

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