Rails - 由于验证而导致功能测试失败

时间:2012-12-08 01:08:35

标签: ruby-on-rails validation pdf tdd paperclip

我不能为我的生活弄清楚这里出了什么问题。情况就是这样:

        
  • 我有一个使用paperclip作为pdf附件的文档模型
  •     
  • 功能测试上传文档但失败
  •     
  • 原因是我验证它是一个pdf文件 - 某种程度上验证失败
  •     
  • 但是,文件 是pdf且验证不应失败
  •     
  • 验证仅在测试中失败 - 通过上传其抱怨的文件手动完成它非常正常

这是我的失败测试(计数不增加一个):

test "should create document" do
  assert_difference('Document.count') do
    post :create, document: { pdf: fixture_file_upload("../files/document_test_file.pdf"), language: @document.language, published_on: @document.published_on, tags: @document.tags, title: @document.title, user_id: @user }
  end

  assert_redirected_to document_path(assigns(:document))
end

这是我在文档模型中的验证:

def document_is_a_pdf
  if !self.pdf.content_type.match(/pdf/)
    errors.add(:pdf, "must be a pdf file")
    false
  end
end

如果我没有在模型中调用该验证,则测试运行正常。我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

我知道这是一个老问题,但如果还有人需要帮助,

来自http://apidock.com/rails/ActionController/TestProcess/fixture_file_upload

  fixture_file_upload(path, mime_type = nil, binary = false)

默认情况下,Fixture文件上传方法会将mime类型设置为nil,因此只需更改下面的mime类型即可更正

 fixture_file_upload("../files/document_test_file.pdf", 'application/pdf')

答案 1 :(得分:0)

我发现了问题。不知何故,在测试时,无法确定内容类型。这就是为什么内容类型的验证失败并且测试没有通过。

我将内容类型添加到文档模型中的可访问属性,并在测试中插入了内容类型(文档哈希中的第二个属性):

test "should create document" do
  assert_difference('Document.count') do
    post :create, document: { pdf: fixture_file_upload("../files/document_test_file.pdf"), pdf_content_type: "application/pdf", language: @document.language, published_on: @document.published_on, tags: @document.tags, title: @document.title, user_id: @user }
  end

  assert_redirected_to document_path(assigns(:document))
end