我正在创建功能测试(使用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
文件加载后,应将我重定向到包含已加载数据的其他页面。
这里是否缺少任何配置?
当我测试这种行为(比较测试和开发环境)时,我发现了这一点:
文件已正确附加到表单。然后,在上传后,它会保存为临时文件,但是测试过程创建的临时文件已损坏(我无法手动打开它)。