I would recommend using the request method everywhere, even for POST
requests. The request method uses webrat to make the request and I have
found that it behaves in a more sane fashion. You can specify the request
method & params in the env parameter:
request(url(:foo), :method => 'POST', :params => { ... })
-Ben
On Wed, Dec 24, 2008 at 5:19 AM, Garry Hill <[email protected]> wrote:
>
>
> Hi,
>
> I wonder if anyone can help me. I'm having a problem with my request
> specs.
>
> I'm simulating a post in my specs thusly:
>
> it "should check confirmation password" do
> response = post(url(:account), { :account => {
> :name => 'Name',
> :email => '[email protected]',
> :password => 'secret',
> :password_confirmation => 'wrong',
> }})
> end
>
> but this is generating an error "interning empty string" when I try to
> call 'render' in the controller. This is because the :format param has
> been set to "" rather than nil (or a valid format). The error
> backtrace is this:
>
> merb-core-1.0.6.1/lib/merb-core/controller/mixins/responder.rb:301:in
> `to_sym'
> merb-core-1.0.6.1/lib/merb-core/controller/mixins/responder.rb:301:in
> `_perform_content_negotiation'
> merb-core-1.0.6.1/lib/merb-core/controller/mixins/responder.rb:346:in
> `content_type'
> merb-core-1.0.6.1/lib/merb-core/controller/mixins/render.rb:120:in
> `render'
> /Profession/Development/signedsealed.org/development/signedsealed.org/
> app/controllers/accounts.rb:23:in `create'
> merb-core-1.0.6.1/lib/merb-core/controller/abstract_controller.rb:
> 315:in `send'
> merb-core-1.0.6.1/lib/merb-core/controller/abstract_controller.rb:
> 315:in `_call_action'
> merb-core-1.0.6.1/lib/merb-core/controller/abstract_controller.rb:
> 289:in `_dispatch'
> merb-core-1.0.6.1/lib/merb-core/controller/merb_controller.rb:252:in
> `_dispatch'
> merb-core-1.0.6.1/lib/merb-core/test/helpers/mock_request_helper.rb:
> 367:in `dispatch_request'
> merb-core-1.0.6.1/lib/merb-core/test/helpers/mock_request_helper.rb:
> 118:in `dispatch_to'
> merb-core-1.0.6.1/lib/merb-core/test/helpers/mock_request_helper.rb:
> 340:in `mock_request'
> merb-core-1.0.6.1/lib/merb-core/test/helpers/mock_request_helper.rb:
> 259:in `post'
> ./spec/requests/accounts_spec.rb:64
> rspec-1.1.3/lib/spec/example/example_methods.rb:78:in `instance_eval'
> rspec-1.1.3/lib/spec/example/example_methods.rb:78:in
> `run_with_description_capturing'
> rspec-1.1.3/lib/spec/example/example_methods.rb:19:in `execute'
> /opt/local/lib/ruby/1.8/timeout.rb:48:in `timeout'
> rspec-1.1.3/lib/spec/example/example_methods.rb:16:in `execute'
> rspec-1.1.3/lib/spec/example/example_group_methods.rb:292:in
> `execute_examples'
> rspec-1.1.3/lib/spec/example/example_group_methods.rb:291:in `each'
> rspec-1.1.3/lib/spec/example/example_group_methods.rb:291:in
> `execute_examples'
> rspec-1.1.3/lib/spec/example/example_group_methods.rb:121:in `run'
> rspec-1.1.3/lib/spec/runner/example_group_runner.rb:22:in `run'
> rspec-1.1.3/lib/spec/runner/example_group_runner.rb:21:in `each'
> rspec-1.1.3/lib/spec/runner/example_group_runner.rb:21:in `run'
> rspec-1.1.3/lib/spec/runner/options.rb:90:in `run_examples'
> rspec-1.1.3/lib/spec/runner/command_line.rb:19:in `run'
> rspec-1.1.3/bin/spec:4
>
>
> What appears to happen (though I have only a sketchy understanding of
> what's going on) is that the code breaks my request down using the
> router to generate an {:format => nil, :action =>
> "theaction", :controller => "thecontroller"}.
>
> :action and :controller get split out and used to instantiate and call
> the right method on the right controller but :format gets merged into
> the params. These params are encoded into a query string and sent,
> through 'fake_request' as part of the post body. This results in
> the :format being sent as a parameter:
>
> ..&format=&...
>
> Which is then converted to an empty string by the controller, rather
> than nil.
>
> This empty string is what's causing the problem.
>
> Now, I can fix this by simply removing the :format parameter from the
> post body:
>
> def build_request(params = {}, env = {})
> params.delete(:format)
> ...
> end
>
> but this is obviously a hack.
>
> The format parameter is dealt with correctly if I use webrat's
> "click_button" to post a form, so what's the difference?
>
> Has anyone else seen this? Is the problem in the way I'm calling the
> post? I'm new to this kind of integration testing and making it up as
> I go along. That might show..
>
> Thanks in advance,
>
> Garry
>
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"merb" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [email protected]
For more options, visit this group at http://groups.google.com/group/merb?hl=en
-~----------~----~----~----~------~----~------~--~---