1

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)

4

3 回答 3

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
于 2014-02-28T03:18:28.413 回答
1

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

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

感谢您的其他建议。

于 2014-02-28T17:54:10.173 回答
0

我会做如下:

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

于 2014-02-28T00:27:31.487 回答