for_receive和should_not_receive的RSpec都为Exception传递

Mar*_*hen 9 rspec ruby-on-rails

我有一个非常奇怪的rspec情况.我试图测试我的函数是否正确处理异常.以下是我的代码:

在User.rb中:

def welcome_user
      begin
        send_welcome_mail(self)
      rescue Exception => exception
         ErrorMessage.add(exception, user_id: self.id)
      end
    end
end
Run Code Online (Sandbox Code Playgroud)

在user_spec.rb中

it "adds to error message if an exception is thrown" do
  mock_user = User.new
  mock_user.stub(:send_welcome_mail).and_raise(Exception)
  ErrorMessage.should_receive(:add)
  mock_user.welcome_user
end
Run Code Online (Sandbox Code Playgroud)

测试通过了,但是当我改变ErrorMessage.should_receive(:add)ErrorMessage.should_not_receive(:add),它也通过了任何见解?

pru*_*wan 5

由于rspec 2.11暴露了我的一个测试以表现出这样的"异常",我决定在github上提出这个问题.您可以通过https://github.com/rspec/rspec-mocks/issues/164进行讨论

简介:any_instance.should_not_receive未定义,避免


Rus*_*nov 5

您可以尝试使用的是.should_receive结合使用.never

ErrorMessage.should_receive(:add).never
Run Code Online (Sandbox Code Playgroud)