Rspec - 需要存根在另一个文件中调用的File.open

时间:2013-06-06 16:48:16

标签: ruby testing rspec mocking stubbing

在我的测试中,我正在使用一些参数初始化一个名为Package的新类。

在这个类的初始化中,我打开了一个在我的远程盒子上可用的文件,但不是本地常用的文件。我想知道如何在我的测试中修改该方法。

我正在使用rspec和mocha。我试过像:

File.stubs(:open).with(:file).returns(File.open("#{package_root}/test_files/test.yml"))

在我的测试中初始化Package之前,我有这条线。

我收到了这个错误:

unexpected invocation: File.open('package/test_files/test.yml')
   satisfied expectations:
   - allowed any number of times, not yet invoked: File.open(:file)

我不熟悉rspec或mocha,所以请帮助。谢谢!

2 个答案:

答案 0 :(得分:15)

存根的新语法如下所示:

allow(File).to receive(:open).with('file_name').and_return(file_like_object)

答案 1 :(得分:9)

我不确定您是否需要.with(:file)部分,请尝试完全删除它。另外,我相信通过这样指定它,你实际上是在告诉它希望某人调用该方法并将其传递给:file符号而不是例如字符串文件名。还要考虑预加载测试YAML文件,然后返回:

let(:file_like_object) { double("file like object") }

File.stub(:open).and_return(file_like_object)