彪马:使用 FileUtils.mv() 测试文件名编辑时"Same File"错误



我正在使用RSPEC和Capybara为Rails 5应用程序编写单元测试,目前,我正在粘住试图测试将文件上传到控制器的文件的能力。该应用似乎可以完美地工作:我有一个文档控制器带有附件的文件,这要归功于纸袋,并且允许用户可以编辑文件名(无扩展名(的视图,因此当用户单击"保存"按钮时,控制器会使用。fileutils"重命名"文件:

@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

这不是导轨错误,而是puma:https://i.stack.imgur.com/7daxt.png

任何帮助将不胜感激。

我猜我猜/home/moyarzun/GarageLabs/lexgo/public/system/documents/files/000/000/001/original/test_file.docx实际上是系统中其他地方文件的软链接,并且在运行测试时已经存在指定/home/moyarzun/GarageLabs/lexgo/public/system/documents/files/000/000/001/original/edited_filename.docx的同一文件的链接(因为测试并未清除每次运行时创建的链接(。如果您尝试将链接移动到另一个已经链接到同一文件的另一个链接,您将获得"同一文件"参数错误。您需要确保在测试完成时(或在运行测试之前(清理测试中的文件。

最新更新