ruby-on-rails - 在 Rails 测试环境中加载 .xlsx 文件时临时文件损坏
问题描述
我正在创建功能测试(使用 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
加载文件时,它应该将我重定向到加载数据的不同页面。
我在这里缺少任何配置吗?
当我测试这种行为(比较测试和开发环境)时,我发现了这一点:
该文件已正确附加到表单。然后,上传时保存为临时文件,但测试过程创建的临时文件已损坏(我无法手动打开它)。
解决方案
推荐阅读
- excel - 找不到文件路径时如何退出子程序?
- javascript - 无法使用蚂蚁设计更改多选的值并做出反应
- c# - 如何为拥有的类型创建单个表
- html - 如何将菜单的背景颜色更改为透明?
- excel - vba 图表从一张纸复制到另一张纸。(希望使用工作表索引参考而不是名称)
- tensorflow-serving - Tensorflow Serving,在线预测:如何构建一个接受“image_bytes”作为输入张量名称的签名定义?
- java - 我如何解决 SpringWebFlow + SpringBoot 中的静态资源?
- amazon-web-services - AWS Comprehend 自定义分类作业输出的行数多于输入行数
- c# - C# - 创建一个递归函数来计算列表的总和。是否可以仅使用列表作为唯一参数?
- javascript - 如何使用函数动态设置img src