代码之家  ›  专栏  ›  技术社区  ›  Denny Mueller

接收(:method_name)正确用法的rspec.

  •  0
  • Denny Mueller  · 技术社区  · 6 年前

    精简代码:

    class Object
      def foo
        (bar / 100).round(2)
      end
    
      def bar
        self.some_integer
      end
    end
    

    我想测试foo调用bar,所以我的规范如下

    it 'calls #bar upon self' do
      expect(@object).to receive(:bar)
      @object.foo
    end
    

    不幸的是,规范失败了,因为当调用 @object.foo 这个 #bar 是零并且在分区中失败。这是不可能的 #酒吧 返回以前确保的零值。 如何正确测试?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Rodrigo    6 年前

    你应该声明 bar 此测试所需的值:

    expect(@object).to receive(:bar).and_return(10)
    

    Docs

    编辑

    你也可以(谢谢@meta):

    expect(@object).to receive(:bar).and_call_original