【问题标题】:Ruby Rspec message expectations for a caught exceptionRuby Rspec 对捕获的异常的消息期望
【发布时间】:2014-02-28 00:22:46
【问题描述】:

Rspec 有没有办法为捕获的异常设置期望?我想验证是否引发了 MyException,但由于我正在捕获异常,Rspec 似乎并不知道它曾经发生过。

begin
  if success
    do good stuff
  else
    raise MyException.new()
  end
rescue MyException => e
  clean up
end

我尝试了一些类似以下的方法,但均未成功。 MyException.should_receive(:new)Kernel.should_receive(:raise).with(MyException)

【问题讨论】:

    标签: ruby rspec try-catch expectations


    【解决方案1】:

    您可以测试救援块的行为而不是检查异常:

    class Test
      def my_method
        if success
          # do good stuff
        else
          raise MyException.new()
        end
      rescue MyException => e
        clean_up
      end
    end
    
    describe Test do
      it "should clean up when unsuccessful" do
        subject.stub(:success) { false }
        subject.should_receive(:clean_up)
        subject.my_method
      end
    end
    

    【讨论】:

      【解决方案2】:

      我想出了如何做我需要的事情。

      class MyClass
        def my_method
          begin
            if success
              do good stuff
            else
              raise MyException.new
            end
          rescue MyException => e
            # clean up
          end
        end
      end
      
      describe MyClass do
        it "Expects caught exception" do
          my_instance = MyClass.new()
          my_instance.should_receive(:raise).with(any_instance_of(MyException))
          my_instance.my_method()
        end
      end
      

      感谢您的其他建议。

      【讨论】:

        【解决方案3】:

        我会这样做:

        RSpec.describe "matching error message with string" do
          it "matches the error message" do
            expect { raise StandardError, 'this message exactly'}.
              to raise_error('this message exactly')
          end
        end
        

        Rspec Documentation逐字复制

        【讨论】:

        • 如果你没有捕捉到异常,你会这样做,但我正在捕捉它。我想验证异常是否被引发,然后被捕获。
        • @Preffect 存根引发异常的方法/动作作为针对​​该异常的测试
        猜你喜欢
        • 1970-01-01
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        相关资源
        最近更新 更多