Я создаю функциональные тесты (используя Rspec / Capybara) и сталкиваюсь с этой проблемой в функции, которая открывает и читает файл .xlsx.
Сбой / Ошибка:
когда ".xlsx", то Roo :: Excelx.new (file.path, nil,: ignore)
еще поднять "Типовое соглашение: # {file.original_filename}"
Zip :: ZipError:
Конец zip центральной подписи каталога не найден
Эта ошибка возникает только при выполнении тестов. Он отлично работает на месте и в производстве.
Я обнаружил, что возможными причинами этой ошибки являются повреждение файла и неправильное расширение файла.
Метод возникновения ошибки:
def open_spreadsheet
case File.extname(file.original_filename)
when ".csv" then Csv.new(file.path, nil, :ignore)
when ".xls" then Roo::Excel.new(file.path, nil, :ignore)
when ".xlsx" then Roo::Excelx.new(file.path, nil, :ignore)
else raise "Tipo de arquivo desconhecido: #{file.original_filename}"
end
end
Тест:
RSpec.feature "LoadSponsorDatabaseAndInviteUsers", type: :feature do
scenario "loading sponsor database" do
admin = create(:user_admin)
login_as(admin, :scope => :user)
visit(sponsor_database_imports_new_path)
attach_file("sponsor_database_import[file]", Rails.root + "spec/fixtures/test_data.xlsx")
click_button("Load File")
expect(page).to have_content("Some content")
end
end
Когда файл загружен, он должен перенаправить меня на другую страницу с загруженными данными.
Есть ли какая-то конфигурация, которую я здесь пропускаю?
Когда я тестировал это поведение (сравнивая среду тестирования и разработки), я обнаружил следующее:
Файл правильно прикреплен к форме. Затем при загрузке он сохраняется как временный файл, но временный файл, созданный в процессе тестирования, поврежден (я не смог открыть его вручную).