我不能为我的生活弄清楚这里出了什么问题。情况就是这样:
这是我的失败测试(计数不增加一个):
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
如果我没有在模型中调用该验证,则测试运行正常。我在这里做错了什么?
答案 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