【问题标题】:Rspec -- need to stub File.open that gets called in another fileRspec - 需要对在另一个文件中调用的 File.open 存根
【发布时间】:2013-06-02 19:04:27
【问题描述】:

在我的测试中,我正在使用一些参数初始化一个名为 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 不太熟悉,因此非常感谢您的帮助。谢谢!

【问题讨论】:

    标签: ruby testing rspec mocking stubbing


    【解决方案1】:

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

    let(:file_like_object) { double("file like object") }
    
    File.stub(:open).and_return(file_like_object)
    

    【讨论】:

    • 我将File.stub(:open).and_return(... 更改为File.stubs(:open).returns(...,它对我有用。谢谢!
    【解决方案2】:

    存根的新语法如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 2015-01-22
      相关资源
      最近更新 更多