防止错误导致RSpec测试失败

时间:2017-08-02 20:28:49

标签: ruby rspec error-handling

假设我有一个类包含这样的方法:

class MyClass
  ...

  def self.some_class_method
    my_instance = MyClass.new
    self.other_class_method(my_instance)
    raise 'ERROR'
  end

  def self.other_class_method(instance)
    ...
  end
end

对它的测试看起来像这样:

require 'spec_helper'

describe MyClass do
  describe '.some_class_method' do
    context 'testing some_class_method' do
      it 'calls other_class_method' do
        MyClass.should_receive(:other_class_method)

        MyClass.some_class_method
      end
    end
  end
end

ERROR导致测试错误,如果我删除了raise 'ERROR'行,则测试通过。但在这里我只想测试some_class_method是否会调用other_class_method,无论之后发生了什么。我可以改变它以期望该方法引发错误,但这不是这个特定测试的目的。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

你可以在测试中解救异常。

describe MyClass do
  describe '.some_class_method' do
    context 'testing some_class_method' do
      it 'calls other_class_method' do
        MyClass.should_receive(:other_class_method)
        begin
          MyClass.some_class_method
        rescue
        end
      end
    end
  end
end

答案 1 :(得分:0)

添加对方法引发错误的期望怎么样?这甚至可以增强您的测试:

describe MyClass do
  describe '.some_class_method' do
    context 'testing some_class_method' do
      it 'calls other_class_method' do
        expect(MyClass).to receive(:other_class_method)
        expect { MyClass.some_class_method }.to raise_error("ERROR")
      end
    end
  end
end