Ruby on rails 使用Capybara和Rspec测试Carrierwave文件上传到s3

Ruby on rails 使用Capybara和Rspec测试Carrierwave文件上传到s3,ruby-on-rails,rspec,amazon-s3,capybara,carrierwave,Ruby On Rails,Rspec,Amazon S3,Capybara,Carrierwave,我已经实现了carrierwave文件上传到AmazonS3,就像中一样 不过我在测试这个时遇到了麻烦。我可以用水豚附加一个文件,但当我点击按钮上传时,它不会重定向到正确的操作。我检查了save_和open_页面,它显示的是主页 当我在浏览器中测试它时,它工作正常,但是关于s3上传的信息确实会添加到url()。不知道为什么这在测试中不起作用 以下是一些相关文件: 示例_spec.rb- 初始化器/carrierwave.rb- models/work.rb- 控制器/works\u contro

我已经实现了carrierwave文件上传到AmazonS3,就像中一样

不过我在测试这个时遇到了麻烦。我可以用水豚附加一个文件,但当我点击按钮上传时,它不会重定向到正确的操作。我检查了save_和open_页面,它显示的是主页

当我在浏览器中测试它时,它工作正常,但是关于s3上传的信息确实会添加到url()。不知道为什么这在测试中不起作用

以下是一些相关文件:

示例_spec.rb-

初始化器/carrierwave.rb-

models/work.rb-

控制器/works\u controller.rb-


如何用水豚和rspec测试这种类型的表单?

好的,我已经解决了这个问题。关键是CarrierWaveDirect:

我需要将这一行添加到spec_helper.rb中:

include CarrierWaveDirect::Test::Capybarahelopers

然后我的测试需要这些CarrierWaveDirect匹配器:

attach_file_用于直接上传(“{Rails.root}/spec/support/images/example.jpg”)
直接上传(ImageUploader.new,“上传图像”)

因此,最终通过测试如下所示:

it "creates a new work with a test image" do
    client = FactoryGirl.create(:client)
    work = FactoryGirl.build(:work)
    visit works_path
    attach_file_for_direct_upload("#{Rails.root}/spec/support/images/example.jpg")
    upload_directly(ImageUploader.new, "Upload Image")
    fill_in "Name", :with => work.name
    select("2012", :from => "work_date_1i")
    select("December", :from => "work_date_2i")
    select("25", :from => "work_date_3i")
    select(client.name, :from => "work_client_ids")
    fill_in "Description", :with => work.description
    fill_in "Service", :with => work.service
    save_and_open_page
    check "Featured"
    click_button "Create Work"
    page.should have_content("Work was successfully created.")
end
我还需要将其添加到我的初始值设定项/carrierwave.rb中:

if Rails.env.test?
    CarrierWave.configure do |config|
      config.storage = :file
      config.enable_processing = false
    end
end

我没有模拟对fog的响应,也没有测试对s3的上传,而是在测试环境中关闭了对s3的上传。

这只是给像我这样陷入困境并拥有类似答案的人的一个提示。我必须在测试中启用js才能正常工作。