0

我一生都无法弄清楚这里出了什么问题。这是这种情况:

  • 我有一个使用回形针作为 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

如果我不在模型中调用该验证,则测试运行良好。我在这里做错了什么?

4

2 回答 2

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')
于 2014-06-27T10:06:46.993 回答
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
于 2012-12-08T16:55:56.440 回答