在Rails测试环境中加载.xlsx文件时,临时文件损坏

时间:2019-01-15 14:09:45

标签: ruby-on-rails roo-gem

我正在创建功能测试(使用Rspec / Capybara),并在打开并读取.xlsx文件的功能上遇到此问题。

  

失败/错误:

     

当“ .xlsx”时,然后在Roo :: Excelx.new(file.path,nil,:ignore)

     

否则引发“ Tipo de arquivo desconhecido:#{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

文件加载后,应将我重定向到包含已加载数据的其他页面。

这里是否缺少任何配置?


当我测试这种行为(比较测试和开发环境)时,我发现了这一点:

文件已正确附加到表单。然后,在上传后,它会保存为临时文件,但是测试过程创建的临时文件已损坏(我无法手动打开它)。

0 个答案:

没有答案