调用实际方法而不是存根版本

时间:2016-08-25 20:31:50

标签: ruby unit-testing rspec

我正在使用以下命令运行Chef spec单元测试。相关代码如下所示。我希望some_test_data可以在单元测试中使用,而不是实际调用的method_name。但是发生的事情是没有使用存根。相反,method_name实际上会被调用,在这种情况下,它不适合单元测试。我在这里误解或做错了什么?谢谢。

rspec spec / unit / mytest_spec.rb

# Code from Chef Spec mytest_spec.rb unit test
allow(ClassName).to receive(:method_name).and_return(some_test_data)

# Code unit test is testing
my_variable = method_name(node)

# Method that gets called above
def self.method_name(node)
  # Do something
end

1 个答案:

答案 0 :(得分:1)

实际上您已将参数传递给method_name,但在存根方法中,您并未将参数存根。这就是为什么在运行测试时不会调用存根方法的原因。

应该是

allow(ClassName).to receive(:method_name).with('argument').and_return(some_test_data)    

[我不确定以下内容,因为您没有发布实际代码。 如果我的假设是错误的,你可以忽略它。]

您正在测试一种类方法,但您并没有在课堂上调用它。即

不应该my_variable = method_name(node)my_variable = Classname.method_name(node)吗?

有关详情,请参阅https://relishapp.com/rspec/rspec-mocks/v/2-99/docs/method-stubshttps://relishapp.com/rspec/rspec-mocks/v/3-2/docs/setting-constraints/matching-arguments