Puma:使用 FileUtils.mv() 测试文件名编辑时出现 "Same File" 错误
Puma: "Same File" error when testing filename edit using FileUtils.mv()
我正在使用 Rspec 和 Capybara 为我的 Rails 5 应用程序编写单元测试,目前我一直在尝试测试重命名上传到我的控制器的文件的能力。该应用程序似乎可以完美运行:我有一个带有附加文件的文档控制器,这要归功于 Paperclip,以及一个允许用户编辑文件名(不带扩展名)的视图,因此当用户单击“保存”按钮时,控制器使用FileUtils "rename" 文件:
@document = Document.find(params[:id])
path = @document.file.path
@document.file_file_name = params[:document][:filename] + '.' + params[:document][:extension]
@document.project_id = params[:document][:project_id]
@document.user_id = params[:document][:user_id]
FileUtils.mv(path, File.join(File.dirname(path), @document.file_file_name))
这已经被几个队友彻底测试过,到目前为止还没有崩溃。但是,当尝试 运行 我的单元测试时出现问题:
RSpec.describe "documents/edit.html.erb", type: :feature do
# Creating user, document, and related models...
it "edits a file as Admin" do
sign_in @user_admin
visit edit_document_path(@document)
find('#document_filename').set('edited_filename')
find("input[type=submit][value='Save']").click
expect(page).to have_content("edited_filename.docx")
end
end
然后,当我 运行 测试时,出现以下错误:
Failures:
1) documents/edit.html.erb edits a file as Admin
Failure/Error: FileUtils.mv(path, File.join(File.dirname(path), @document.file_file_name))
ArgumentError:
same file: /home/moyarzun/GarageLabs/lexgo/public/system/documents/files/000/000/001/original/test_file.docx and /home/moyarzun/GarageLabs/lexgo/public/system/documents/files/000/000/001/original/edited_filename.docx
这不是 Rails 错误,而是 Puma 错误:https://i.stack.imgur.com/7dAxT.png
我们将不胜感激。
我猜 /home/moyarzun/GarageLabs/lexgo/public/system/documents/files/000/000/001/original/test_file.docx
实际上是对系统其他地方文件的软 link,并且 link 对同一个名为 /home/moyarzun/GarageLabs/lexgo/public/system/documents/files/000/000/001/original/edited_filename.docx
的文件已经在您 运行 进行测试时存在(因为测试不会清除每次 运行 时创建的 link)。如果您尝试将一个 link 移动到另一个已经 link 到同一文件的另一个 link,您将收到“同一文件”参数错误。您希望确保在测试完成时(或 运行 测试之前)从测试中清理文件。
我正在使用 Rspec 和 Capybara 为我的 Rails 5 应用程序编写单元测试,目前我一直在尝试测试重命名上传到我的控制器的文件的能力。该应用程序似乎可以完美运行:我有一个带有附加文件的文档控制器,这要归功于 Paperclip,以及一个允许用户编辑文件名(不带扩展名)的视图,因此当用户单击“保存”按钮时,控制器使用FileUtils "rename" 文件:
@document = Document.find(params[:id])
path = @document.file.path
@document.file_file_name = params[:document][:filename] + '.' + params[:document][:extension]
@document.project_id = params[:document][:project_id]
@document.user_id = params[:document][:user_id]
FileUtils.mv(path, File.join(File.dirname(path), @document.file_file_name))
这已经被几个队友彻底测试过,到目前为止还没有崩溃。但是,当尝试 运行 我的单元测试时出现问题:
RSpec.describe "documents/edit.html.erb", type: :feature do
# Creating user, document, and related models...
it "edits a file as Admin" do
sign_in @user_admin
visit edit_document_path(@document)
find('#document_filename').set('edited_filename')
find("input[type=submit][value='Save']").click
expect(page).to have_content("edited_filename.docx")
end
end
然后,当我 运行 测试时,出现以下错误:
Failures:
1) documents/edit.html.erb edits a file as Admin
Failure/Error: FileUtils.mv(path, File.join(File.dirname(path), @document.file_file_name))
ArgumentError:
same file: /home/moyarzun/GarageLabs/lexgo/public/system/documents/files/000/000/001/original/test_file.docx and /home/moyarzun/GarageLabs/lexgo/public/system/documents/files/000/000/001/original/edited_filename.docx
这不是 Rails 错误,而是 Puma 错误:https://i.stack.imgur.com/7dAxT.png
我们将不胜感激。
我猜 /home/moyarzun/GarageLabs/lexgo/public/system/documents/files/000/000/001/original/test_file.docx
实际上是对系统其他地方文件的软 link,并且 link 对同一个名为 /home/moyarzun/GarageLabs/lexgo/public/system/documents/files/000/000/001/original/edited_filename.docx
的文件已经在您 运行 进行测试时存在(因为测试不会清除每次 运行 时创建的 link)。如果您尝试将一个 link 移动到另一个已经 link 到同一文件的另一个 link,您将收到“同一文件”参数错误。您希望确保在测试完成时(或 运行 测试之前)从测试中清理文件。