Surprisingly (given Rails’ generally good testing support), it is not possible to do multipart post requests in integration tests.
At least until now ;-) What is needed to allow for multipart post requests is a method that builds the correctly encoded body from the given parameters, including correct MIME boundaries and headers for the different parts. For easy reuse I put this into a small plugin.
Wherever you create your testing session, just extend it with the
open_session do |s|
upload = fixture_file_upload '/files/dummy.jpg', 'image/jpeg'
s.multipart_post '/files/upload', :uploaded_data => upload
# assertions go here...
Most often you’ll have a custom method for creating new sessions as a part of your DSL, so you could well extend the session object once in this place.
I tried to generally include the module into the Session class in
init.rb, however this didn’t work out. If you find out how to do this, please drop me a line.