0

私は一生、ここで何がうまくいかないのか理解できません。これは状況です:

  • PDFの添付ファイルにペーパークリップを使用するドキュメントモデルがあります
  • 機能テストがドキュメントをアップロードして失敗する
  • この理由は、それがpdfファイルであるという私の検証です-どういうわけかその検証は失敗します
  • ただし、ファイルpdf であり、検証は失敗しません。
  • 検証はテストでのみ失敗します-問題のあるファイルをアップロードして手動で行うと、まったく問題なく動作します

これが私の失敗したテストです(カウントは1つ増えません):

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)

フィクスチャ ファイルのアップロード方法では、デフォルトで MIME タイプが nil に設定されるため、以下のように MIME タイプを変更するだけでこれが修正されます。

 fixture_file_upload("../files/document_test_file.pdf", 'application/pdf')
于 2014-06-27T10:06:46.993 に答える
0

問題が見つかりました。どういうわけか、テスト中にコンテンツ タイプを特定できませんでした。そのため、コンテンツ タイプの検証に失敗し、テストに合格しませんでした。

ドキュメント モデル内のアクセス可能な属性にコンテンツ タイプを追加し、テストにコンテンツ タイプを挿入しました (ドキュメント ハッシュ内の 2 番目の属性)。

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 に答える