测试在 Rails 中创建随后在 RSpec 中删除的文件

Testing the creation of files in Rails that are subsequently deleted in RSpec

我正在尝试找出如何测试 Rails 控制器在随后删除文件时创建的文件。

我有一个创建 CSV 文件的控制器,将它发送给用户,然后从服务器上删除它。它看起来像这样:

class WelcomeController < ApplicationController
  def download_file
     generate_file
     send_data File.read(filename)
     delete_file
  end

  private

  def generate_file
     # code that creates a file
  end

  def delete_file
     File.delete(filename)
  end
end

我的测试文件:

require "rails_helper"

RSpec.describe WelcomeController :type => :controller do
  describe 'GET #download_file' do
    it 'creates csv files' do
      get :download_file
      expect(File.file?(filename)).to be true # fails because file is deleted
    end
  end
end

我正在尝试测试 download_file 创建 csv 文件这一事实,但我似乎无法弄清楚如何告诉 Rails 我想要 delete_file在我的测试环境中忽略的方法。

您可以通过Rails.env获取当前环境

def download_file
  generate_file
  send_data File.read(filename)
  delete_file unless Rails.env.test?
end

每个环境都有不同的行为通常是一个糟糕的设计。考虑改为测试 send_data 发送的数据(查看 this question 的示例)