Uploads with webrat in stories

I’ve read through the messages on this list, and have file upload
specs working in my model and controller tests, using :file =>
ActionController::TestUploadedFile.new(filepath)

But its not working in stories using webrat. I’ve tried

fills_in “foo[file]”, :with => filepath
and
fills_in “foo[file]”, :with => ActionController::TestUploadedFile.new
(filepath)

both fail (0) when submit
clicks_button ‘Update’

oddly, in either case, a browser get opened, with something like
file:///Users/jonathan/rails/myproject/tmp/webrat-1220026536.html
which is blank

suggestions?

thx
linoj

Jonathan L. wrote:

linoj


rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

I haven’t been able to get the webrat uploading method (attaches_file)
to work… If you haven’t tried that method give it a shot, but I
haven’t gotten it to work. To upload in stories I have done this:

csv_file = …
file_to_upload = ActionController::TestUploadedFile.new(csv_file.path,
Mime::CSV)
post my_path, “import_file” => file_to_upload

In my story I didn’t have other fields in the form so I didn’t bother to
investigate why webrat wasn’t working… the clear disadvantage of the
way I used is that I’m doing the post directly.

-Ben

On Aug 29, 2008, at 12:52 PM, Ben M. wrote:

ActionController::TestUploadedFile.new(filepath)
thx
haven’t gotten it to work. To upload in stories I have done this:

csv_file = …
file_to_upload = ActionController::TestUploadedFile.new(csv_file.path,
Mime::CSV)
post my_path, “import_file” => file_to_upload

i am trying that too, but at this point in my story i dont actually
have the current record object to generate the form action path.
How would i extract the :action = path from the in the current
response.body ?

On Aug 29, 2008, at 1:19 PM, Jonathan L. wrote:

i am trying that too, but at this point in my story i dont actually
have the current record object to generate the form action path.
How would i extract the :action = path from the in the
current response.body ?

got it

 #assuming only one form on the page
 path = response.body.match(/action=\"([^"]+)\"/)[1]

still, i dont like bypassing webrat though

I too would suggest trying attaches_file. I use it in a few different
stories I have, and it works fine for me. I don’t believe I’m doing
anything nonstandard. Here’s the basics of what one of mine looks like
(stripped out some fills_in’s, etc. to declutter the example):
When “create a new hotel with photo from a ‘$source’” do |source|
visits new_location_path
fills_in ‘Name’, :with => ‘Maui’
attaches_file ‘location_photo’, File.join(Rails.root, ‘stories’,
‘fixtures’, ‘BigPizza.jpg’)
clicks_button ‘Save’
end

When Webrat matches ‘Exception caught’ on the get/post response body it
tries to save the response body down as a html file and then invokes
opening it in a browser (I believe the opening only works on OS X though
I’ve never tested it in another os).

This is a very useful feature unless you get a blank page :slight_smile:

I’ve had blank errors before which I’ve suspect was a bug but I never
got around to looking at why they did not contain the response body.

oddly, in either case, a browser get opened, with something like
file:///Users/jonathan/rails/myproject/tmp/webrat-1220026536.html
which is blank


Joseph W.
http://www.joesniff.co.uk

On Aug 29, 2008, at 1:58 PM, Christopher B. wrote:

I too would suggest trying attaches_file. I use it in a few
different stories I have, and it works fine for me. I don’t
believe I’m doing anything nonstandard. Here’s the basics of what

yep, works for me :slight_smile:
thx

This topic might be a little bit old, but since I run into this issue
recently here’s the solution:

Due to a lack of multipart form support for integration tests in Action
Pack Webrat’s attach_file does not work with Rails 2.0.2.

I posted a workaround on our blog:
http://devblog.imedo.de/2009/9/2/file-uploads-with-webrat-in-ruby-on-rails-2-0-2.

In case there are other people trying to do the same thing, webrat’s
implementation of attach_file has changed somewhat. See this URL for the
current method to attach a file in your multipart form:

To summarize, syntax is
attach_file (field_locator, path, content_type = nil)

There is no need to call File.join or File.open, just specify the
relative path.