首页 > 解决方案 > 如何断言没有进行方法调用,没有任何实例?

问题描述

我有一个类,在一种情况下应该调用:my_method,但在另一种情况下不能调用方法:my_method。我想测试这两种情况。另外,我希望测试记录:my_method不应该调用的情况。

any_instance通常不鼓励使用,所以我很乐意学习一种替代它的好方法。

此代码片段是我想编写的测试类型的简化示例。

class TestSubject
  def call
    call_me
  end

   def call_me; end
   def never_mind; end
end

require 'rspec'

spec = RSpec.describe 'TestSubject' do
  describe '#call' do
    it 'calls #call_me' do
      expect_any_instance_of(TestSubject).to receive(:call_me)
      TestSubject.new.call
    end

    it 'does not call #never_mind' do
      expect_any_instance_of(TestSubject).not_to receive(:never_mind)
      TestSubject.new.call
    end
  end
end

spec.run # => true

它有效,但使用 expect_any_instance_of方法,不推荐。

如何更换它?

标签: ruby-on-railstestingrspectdd

解决方案


我会做这样的事情

describe TestSubject do
  describe '#call' do
    it 'does not call #something' do 
      subject = TestSubject.new
      allow(subject).to receive(:something)

      subject.call

      expect(subject).not_to have_received(:something)
    end
  end
end

希望这有帮助!


推荐阅读