В файле fixture_file_upload {file} не существует ошибки - программирование
Подтвердить что ты не робот

В файле fixture_file_upload {file} не существует ошибки

Ниже приведен мой тестовый код для загрузки файла.

describe "file process" do
 before(:each) do
   # debugger
   @file = fixture_file_upload('test.csv', 'text/csv')
 end

 it "should be able to upload file" do
  post :upload_csv, :upload => @file
  response.should be_success
 end
end

Однако, когда я запускаю rspec spec, он дал мне ошибку ниже

Failure/Error: @file = fixture_file_upload('test.csv', 'text/csv')
 RuntimeError:
   test.csv file does not exist
 # ./spec/controllers/quotation_controller_spec.rb:29:in `block (3 levels) in <top (required)>'

У меня много мест в googled, но я все еще не мог понять, в чем причина этого. Любая идея?

4b9b3361

Ответ 1

Fixture_file_upload в основном по-прежнему работает. Вам просто нужно убедиться, что путь устройств в вашем файле spec_helper.rb раскоментирован и правильно установлен в путь spec/fixtures и включить ActionDispath::TestProcess:

RSpec.configure do |config|
  config.include ActionDispatch::TestProcess

  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  ...

И где вы указываете файл в своих тестах, не забудьте перед именем вашего файла указать "/", как в следующем примере:

describe "POST /subscriber_imports" do
  let(:file) { { :file => fixture_file_upload('/files/data.csv', 'text/csv') } }
  subject { post :create, :subscriber_import => file }
  ...
end

Абсолютный путь к файлу - это базовый путь, указанный в config.fixture_path плюс относительный путь, указанный в вызове функции fixture_file_upload. Итак, в этом примере file.csv должен быть помещен в #{::Rails.root}/spec/fixtures/files/data.csv

Ответ 2

Основываясь на самом голосовавшем ответе на вопрос this, вы должны поместить файл в папку {Rails.root}/spec/fixtures/files