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