我需要测试一个文件打开操作。我可以测试first operation但不能测试second。
File.open("#{TemplateFile.fixture_path}/#{@template_file}") do |input_file|
template = ERB.new(input_file.read)
File.open("#{@project_name}/#{@destination_file}", 'w') do |output_file|
output_file.puts template.result binding
end
end
end
我正在使用此代码:
module Pod
describe TemplateFile do
it "opens the template" do
dict = {"README.md.erb" => "README.md"}
File.expects(:open).with("#{TemplateFile.fixture_path}/README.md.erb")
File.expects(:open).with("Sample/README.md.erb", 'w')
TemplateFile.new(dict, "Sample")
end
end
end
但是我收到了一个错误:
unsatisfied expectations:
- expected exactly once, not yet invoked: File.open('/README.md.erb', 'w')
satisfied expectations:
- expected exactly once, invoked once: File.open('/lib/pod/command/../../../fixtures/README.md.erb')
似乎摩卡不是第二个File.open
。
答案 0 :(得分:2)
原因是因为expects
验证调用是否会发生但实际上并没有让它通过。所以块中的内容无法运行。
然而,除了告诉你为什么它不起作用之外,我还想指出你在做什么可能不是你想要做的。
您可能想要做的是:
template = ERB.new(File.read("#{TemplateFile.fixture_path}/#{@template_file}"))
File.open("#{@project_name}/#{@destination_file}", 'w') do |output_file|
output_file.puts template.result binding
end
您不需要嵌套。
然后,在测试您要执行的操作时,请确认您正确读取的文件是:
File.expects(:read).with("#{TemplateFile.fixture_path}/README.md.erb").returns(some_known_fixture)
returns
部分说明当它确实使用指定的参数获取此read
方法时,我希望您返回此已知事物,以便template
对其余部分具有良好的值代码。