使用raise_error(capybara)的结果

时间:2015-03-10 10:03:48

标签: ruby-on-rails rspec automation capybara

我使用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

但我无法通过语法来获取错误文本。

1 个答案:

答案 0 :(得分:1)

答案:如果我理解正确,那么在完成任务时出现的错误

@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