Rails:创建一个功能规范来测试具有文件上载字段的表单

时间:2013-01-29 22:57:55

标签: ruby-on-rails rspec tdd capybara bdd

人们如何处理以下情况: 我有一个拍摄图像的表格。如何验证图像是否被接受?或者这不是您应该在此级别的测试中验证的内容吗?

scenario "add facebook like gate and save as draft" do
  path =  "#{Rails.root}/app/assets/images/like_gate.jpg"

  visit root_url
  click_link I18n.t(:create_a_new_promotion)
  fill_in I18n.t(:title), with: "My promotion"
  click_button I18n.t(:continue)

  expect(page).to have_text(I18n.t(:promotion_details))
  expect(page).to have_text("My promotion")

  fill_in I18n.t(:like_gate_copy), with: "Like our page to enter the contest!"
  attach_file I18n.t(:upload_lg_image), path
  click_button I18n.t(:save_as_draft)

  expect(page).to have_text(I18n.t(:promotion_successfully_saved))
end

是否有特定的方法来验证attach_file是否真的成功了? 另外,人们如何测试文件上传?在您的请求规格,控制器规格和型号规格?我想坚持RSpec和Capybara进行所有测试。

由于

1 个答案:

答案 0 :(得分:3)

由于attach_file是水豚方法,因此请勿对其进行测试。

而是考虑有效/无效的上传如何改变您的系统状态。例如,如果上传用户头像,请验证用户模型是否指向您刚刚上传的图像的ID。如果您正在进行更高级别的测试,请验证用户是否看到了他们希望在页面上看到的上传图片(网址)。

简而言之,不要测试图片上传,测试结果。

expect(page).to have_selector("img[src=#{path}]")