gpt4 book ai didi

ruby-on-rails - 根据 rspec,为什么使用 File.open 调用一次会导致它被调用 3 次

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:01 25 4
gpt4 key购买 nike

在下面你可以看到我只调用了一次 File.open 但 rspec 告诉我它收到了 3 次。

def self.import_file(filename)
current_file = filename.split('/').last
destroy_all(["filename = ?",current_file])

unpack_format = "A#{INPUT_FILE_FORMAT.map{|element| element[1]}.join("A")}"
debugger
File.open(filename, 'r').each do |line|
hash_created = create_hash(line, unpack_format).merge({:filename=>current_file})
create(hash_created)
end
end

it "should delete previous records with the same filename" do
Payrec.should_receive(:destroy_all).with(["filename = ?", "testfile.txt"])
File.should_receive(:open).and_return([@file_line])
Payrec.import_file "testfile.txt"
end

输出是

<File (class)> expected :open with (any args) once, but received it 3 times

最佳答案

每个人和他的狗都调用 File.open。我可以想象它调用的原因有很多:RSpec 读取它的配置文件,Rails 读取它的配置文件,Cucumber 读取它的配置文件,调试器创建一个临时文件,其他东西创建一个临时文件等等。

您应该检查正在调用File.open在哪里调用发生,什么参数是以及为什么会发生这种情况。

但是,在对核心方法设定期望时,这是您必须处理的事情。

例如,想象一下,您正在 Rubinius 上运行您的规范。在 Rubinius 中,编译器是用 Ruby 编写的。它目前不缓存其编译结果,但肯定可以想象它可以缓存它们,然后自然会使用 File.open。砰!现在,您的规范会根据您是否达到 JIT 阈值而随机中断。

或者,更糟糕的是:所有 Rubinius 都广泛使用数组和符号来实现几乎所有内容。尝试对那些设定一些期望!

关于ruby-on-rails - 根据 rspec,为什么使用 File.open 调用一次会导致它被调用 3 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2195576/

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