RSpec与我的自定义错误类

时间:2016-09-18 19:27:45

标签: ruby rspec

在RSPec中我有这个:

expect{obj.my_method}.to raise_error(Module::Error::MyErrorClass)

我的测试失败了以下:

expected Module::Error::MyErrorClass, got #<RuntimeError: My error message.

我想要像

这样的东西
expect{obj.my_method}.to raise_error(Module::Error::MyErrorClass.message)

但在那种情况下测试失败,没有任何特定的消息。我怎么能通过?

我的错误类如下:

module Module
  module Error
    class MyErrorClass < StandardError
      def self.message
        raise "My error message."
      end
    end
  end
end

1 个答案:

答案 0 :(得分:2)

您的错误类message方法应该只是define a string - 即。

module Module
  module Error
    class MyErrorClass < StandardError
      def message
        "My error message."
      end
    end
  end
end

现在,假设实际上已经引发了这个异常,那么以下任何一个都应该有效:

expect{obj.my_method}.to raise_error(Module::Error::MyErrorClass)
expect{obj.my_method}.to raise_error(Module::Error::MyErrorClass.new.message)
expect{obj.my_method}.to raise_error("My error message.")
expect{obj.my_method}.to raise_error(Module::Error::MyErrorClass, "My error message.")

Link到此匹配器的RSpec文档。)