Повреждение временного файла при загрузке файла .xlsx в тестовой среде rails - PullRequest
0 голосов
/ 15 января 2019

Я создаю функциональные тесты (используя 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

Когда файл загружен, он должен перенаправить меня на другую страницу с загруженными данными.

Есть ли какая-то конфигурация, которую я здесь пропускаю?


Когда я тестировал это поведение (сравнивая среду тестирования и разработки), я обнаружил следующее:

Файл правильно прикреплен к форме. Затем при загрузке он сохраняется как временный файл, но временный файл, созданный в процессе тестирования, поврежден (я не смог открыть его вручную).

...