From: David Chelimsky <dchelim...@gmail.com>
To: rspec-users <rspec-users@rubyforge.org>
Sent: Thu, September 16, 2010 4:59:26 AM
Subject: Re: [rspec-users] [rails] url_for host and protocol not set when full
spec suite run
On Sep 16, 2010, at 1:44 AM, Michael Kintzer wrote:
From: David Chelimsky <dchelim...@gmail.com>
>
>To: rspec-users <rspec-users@rubyforge.org>
>Sent: Wed, September 15, 2010 8:51:48 PM
>Subject: Re: [rspec-users] [rails] url_for host and protocol not set when full
>spec suite run
>
>
>On Sep 15, 2010, at 1:05 PM, Michael Kintzer wrote:
>
>rspec (2.0.0.beta.19)
>>rails (3.0.0)
>>authlogic (2.1.6)
>>bartt-ssl_requirement (1.2.3)
>>RUBYGEMS VERSION: 1.3.7
>>RUBY VERSION: 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10.4.0]
>>
>>Hi,
>>
>>I'm getting different results when running a Rails 3 scaffold generated
>>controller example depending on whether or not I run 'rspec spec' or 'rspec
>>spec/controllers'. The difference occurs when evaluating the dynamic route
>>methods with for '_url', e.g. my_model_url I'm using Authlogic and
>>SslRequirement as well. The issue may be in either of those libraries, but
>>the
>>only difference is how I run the spec suite. I disable the Ssl requirement
>>check in the test.rb environment file.
>>
>>Assume I generated the scaffold code with: "rails g scaffold scaffold" to
>>create a "Scaffold" model.
>>
>>See relevant code here: http://gist.github.com/581130
>>
>>When I run 'rspec spec/controllers', the example in question passes. I
>>placed
>>debug code in url_for.rb (bartt-ssl_requirement-1.2.3) to parse the options
>>passed to url_for and they include the :host and :protocol parameters, :host
>>=>
>>"test.host", :protocol => "http://".
>>
>>When I run 'rspec spec', the example in question fails. The url_for options
>>are missing both the :host and :protocol parameters. If I manully pass
>>those
>>into the my_model_url method, the example will pass. If I use the _path
>>version of the route method, the example passes.
>>
>>The stack trace in the failing case is (path to gems directory omitted):
>>1) ScaffoldsController POST create with valid params redirects to the created
>>scaffold
>> Failure/Error: response.should redirect_to(scaffold_url(mock_scaffold))
>> Missing host to link to! Please provide :host parameter or set
>>default_url_options[:host]
>> # .../actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:473:in
>>`url_for_without_non_ssl_host'
>> # .../bartt-ssl_requirement-1.2.3/lib/url_for.rb:44:in
>>`url_for_without_secure_option'
>> # .../gems/bartt-ssl_requirement-1.2.3/lib/url_for.rb:32:in `url_for'
>> # .../actionpack-3.0.0/lib/action_dispatch/routing/url_for.rb:132:in
>>`url_for'
>> # .../actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:195:in
>>`factor_library_url'
>> # ./spec/controllers/scaffolds_controller_spec.rb:70
>> # .../activesupport-3.0.0/lib/active_support/dependencies.rb:239:in
>`inject'
>>
>>So, I'm stumped as to why 'rspec spec' is behaving differently from 'rspec
>>spec/controllers' with respect to generating the appropriate url_for options.
>>
>
>
>This sort of problem usually boils down to something interacting with global
>state - something that is only getting loaded when you run the full suite. To
>narrow it down, try running subsets of the directories:
>
>
>rspec spec/controllers spec/requests
>rspec spec/controllers spec/views
>rspec spec/controllers spec/models
>
>
>etc
>
>
>HTH,
>David
>
>-----
>David, thanks for the suggestion. One of my model specs was including
>Rails.application.routes.url_helpers, so it could evaluate route paths (b/c
>one
>of my models is doing the same, unusual, but supported). Removing the
>include
>fixed the controller spec problem mentioned previously. Of course this broke
>the model spec that needed url_helpers, but I was able to work around it by
>hard-coding what the expected route should be.
>
>Any idea why including url_helpers in the model spec causes this particular
>issue? It would be nice if there wasn't a conflict. I haven't traced
>through
>it enough to understand why the conflict occurs.
Rails.application.routes.url_helpers is a global object, so if the spec is
doing
anything to change its state that might cause trouble. That's all I can think
of. How are you including them?
---
I was including them with "include Rails.application.routes.url_helpers" which
is the Rails 3 recommendation as specified in ActionController::UrlWriter
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users