gpt4 book ai didi

rspec - 如何在RSpec模拟/ stub 中使用不同的参数值?

转载 作者:行者123 更新时间:2023-12-03 10:07:05 26 4
gpt4 key购买 nike

我的程序从网络上下载了一个zip文件,然后对其进行了解析。与解析相关的代码是:

Zip::File.open("real_file.zip") do |zip_file|
# do stuff
end

在我的RSpec测试环境中,我想对这段代码进行 stub 分析,以解析伪造的/模拟的文件,而不是真实的文件。具体来说,我想将参数值“real_file.zip”替换为“mock_file.zip”。

我尝试了以下方法:
allow(Zip::File).to receive(:open).and_return(Zip::File.open("mock_file.zip"))

...但这会阻止在块内执行代码( # do stuff)。我不希望该方法返回模拟文件的内容,而是将rahter分配给 zip_file的值以供进一步使用。如何做到这一点?

最佳答案

您要执行的操作如下:

mock_file = Zip::File.open('mock_file.zip')
allow(Zip::File).to receive(:open) { |&block| block.call(mock_file) }

您在这里所做的就是在原始代码中为该块产生一个值。简单地返回标量值的问题是它不会对您的块产生任何结果,因此不会被调用。请注意,在放入消息期望值之前,我将打开模拟文件,因为它还会拦截您对 Zip::File.open的调用,并导致良好的堆栈溢出。

更多信息: https://www.relishapp.com/rspec/rspec-mocks/v/3-2/docs/configuring-responses/block-implementation#yield-to-the-caller的块

关于rspec - 如何在RSpec模拟/ stub 中使用不同的参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41406665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com