如何使用 rspec 测试写入文件?

How to test write to file with rspec?

我有这样的函数代码:

      Dir.mkdir('config') unless File.exist?('config')
      File.open('config/brakeman.yml', 'wb') do |file|
        file.write(response.body)

如何测试 file.write(response.body) 行? 我试着像这样模拟和存根:

  allow(response).to receive(:body).and_return(body)
  allow(File).to receive(:open).with('config/brakeman.yml', 'wb') do |file|
    file.write(response.body)
  end
  expect(File).to receive(:open).with('config/brakeman.yml', 'wb')
  subject.create_config(response)
  expect(file).to receive(:write).with(body)
  expect(File.open('config/brakeman.yml')).to eq(body)

我认为测试标准库方法不是一个好主意。只需用

覆盖它
allow(File).to receive(:open).with('config/brakeman.yml', 'wb') do |file|
  expect(file).to receive(:write).with(response.body)
end

我想这应该足够了

不要测试已经测试过的代码:)