gpt4 book ai didi

ruby-on-rails - Rspec 中回形针内容类型验证失败

转载 作者:数据小太阳 更新时间:2023-10-29 08:47:38 26 4
gpt4 key购买 nike

我使用带有 Paperclip 4.1.1 的 Rails 4.0.0 来附加 mp3 和 pdf 文件。我正在使用 Capybara 在 Rspec 中编写我的集成测试。

我对两种类型的文件都进行了内容类型和文件名验证。

class Song < ActiveRecord::Base
validates :title, presence: true
validates :writeup, presence: true

has_attached_file :mp3
validates_attachment :mp3,
:content_type => { :content_type => "audio/mp3" },
:file_name => { :matches => [/mp3\Z/] }

has_attached_file :chords
validates_attachment :chords,
:content_type => { :content_type => 'application/pdf' },
:file_name => { :matches => [/pdf\Z/] }

end

我在集成测试中使用它来填充有效歌曲的属性:

def fill_in_valid_song
fill_in("Title", with: "Valid Song")
fill_in("Writeup", with: "Description of song")
attach_file("Mp3", File.join(Rails.root, "/spec/factories/Amazing_Grace.mp3" ))
attach_file("Chords", File.join(Rails.root, "/spec/factories/FakeChordChart.pdf" ))
end

当我运行集成测试以创建有效歌曲时,pdf 文件被接受,但 mp3 文件未通过内容类型验证。

当我自己在浏览器中执行相同的步骤时,歌曲成功上传,没有错误。模型规范也使用相同的文件通过。

当我附加文件时,我认为问题可能是“Mp3”中的大写“M”,但这只是指定附件与哪个文件字段有关。当我尝试将其更改为小写“m”时,错误更改为 Capybara not being able to find the field。

最佳答案

将 mp3 文件的内容类型验证更改为:

validates_attachment :mp3,
:content_type => { :content_type => ["audio/mpeg", "audio/mp3"] },
:file_name => { :matches => [/mp3\Z/] }

RFC为 mp3 文件定义的 MIME 类型是 audio/mpeg。然而,一些浏览器将它们加载为 audio/mp3,这可能就是它通过浏览器工作的原因。

如果这不起作用,您还可以添加 audio/mpeg3audio/x-mpeg-3,因为我也看到过这些。

关于ruby-on-rails - Rspec 中回形针内容类型验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22901941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com