如何在rspec中测试文件是否被删除?
问题描述:
我想知道如何在rspec中测试是否删除了特定的文件。下面是我测试如何在rspec中测试文件是否被删除?
def check_status
filename = File.join('test', 'status.txt')
File.delete(filename) if File.exist?(filename)
end
下面的代码测试:
before do
allow(File).to receive(:exist?).and_return(true)
allow(File).to receive(:delete)
end
it {expect(File).to receive(:delete).with("test/status.txt") }
我收到错误
(File (class)).delete("test/status.txt")
expected: 1 time with arguments: ("test/status.txt")
received: 0 times
能否请你帮我这个问题。我确信我的代码会删除文件,但在测试中它会收到0次。
答
从您的规格看来,您似乎正在嘲笑和剔除,但您永远不会拨打check_status
,所以存根和嘲笑不会被使用。您可以将您的例子更改为类似:
it 'deletes the file' do
expect(File).to receive(:delete).with("test/status.txt")
MyModel.check_status
end
这将是更好还是用实际的文件来测试这一点,而不是嘲弄和存根,因此,它也测试该文件是在正确的位置,即你有必要的权限等
我想你可以检查文件是否仍然存在后删除。允许(File).to接收(:exists?)。and_return(false)' –
您的建议将始终返回true,因为我有代码:allow(File).to receive(:exist?)。and_return(true)。我想检查是否在特定文件上调用删除。 – ivan
你在哪儿叫'check_status'? – Anthony