Ivo Wever
2010-Jun-24 08:05 UTC
[rspec-users] RSpec 2: what should I replace ''params_from'' with?
Hey,
I''m migrating an app to Rails 3 + RSpec 2 and, as expected, a number of
specs broke. Unfortunately, I can''t really find how to fix them. For
instance, there is a spec:
describe SessionsController do
describe "route recognition" do
it "should generate params from GET /login correctly" do
params_from(:get, ''/login'').should = {:controller
=> ''sessions'', :action => ''new''}
end
end
This spec is located in Rails.root +
/spec/controllers/sessions_controller_spec.rb
The error is:
SessionsController route recognition should generate params from POST
/session correctly
Failure/Error: params_from(:post, ''/session'').should ==
{:controller
=> ''sessions'', :action => ''create''}
undefined method `params_from'' for
#<RSpec::Core::ExampleGroup::Nested_15::Nested_2:0x458d348>
#
./vendor/gems/actionpack-3.0.0.beta4/lib/action_dispatch/testing/assertions/routing.rb:175:in
`method_missing''
# ./spec/controllers/sessions_controller_spec.rb:121
Also note the ''RSpec::Core::ExampleGroup'': it seems like it
doesn''t
correctly infer it should be RSpec::Rails::ControllerExampleGroup?
--
Posted via http://www.ruby-forum.com/.
Ivo Wever
2010-Jun-24 08:36 UTC
[rspec-users] RSpec 2: what should I replace ''params_from'' with?
Some additional info:
* I''m on Rails 3 beta4 and RSpec 2 beta 13.
* It doesn''t matter whether I invoke the spec as
bundle exec spec spec/controllers/sessions_controller_spec.rb
or
bundle exec rake spec
--
Posted via http://www.ruby-forum.com/.
David Chelimsky
2010-Jun-24 10:59 UTC
[rspec-users] RSpec 2: what should I replace ''params_from'' with?
On Jun 24, 2010, at 3:05 AM, Ivo Wever wrote:> Hey, > > I''m migrating an app to Rails 3 + RSpec 2 and, as expected, a number of > specs broke. Unfortunately, I can''t really find how to fix them. For > instance, there is a spec: > > describe SessionsController do > describe "route recognition" do > it "should generate params from GET /login correctly" do > params_from(:get, ''/login'').should => {:controller => ''sessions'', :action => ''new''} > end > endRoute specs work like this now: { :get => "/login" }.should route_to(:controller => ''sessions'', :action => ''new'') { :put => "/widgets/1" }.should_not be_routable This was introduced in 1.2.9, but, unfortunately, I never deprecated the way you''re doing it now. I''ll do so in a 1.3.3 release, but that won''t be for a little bit, and I don''t plan to forward port it to 2.x.> This spec is located in Rails.root + > /spec/controllers/sessions_controller_spec.rbAs of 2.0.0.beta.13, the route_to and be_routable matchers are only exposed to routing specs (in spec/routing). I''ve added a github issue to add them to controller specs as well. In the mean time, if you want to use them in your controller specs, just do this in spec_helper.rb RSpec.configure do |c| c.include RSpec::Rails::RoutingSpecMatchers, :example_group => { :file_path => /\bspec\/controllers\// } end Note that the name RSpec::Rails::RoutingSpecMatchers might change in the next beta, so this is not a formal API or anything - just a workaround for you to get by until the next release. HTH, David> > The error is: > > SessionsController route recognition should generate params from POST > /session correctly > Failure/Error: params_from(:post, ''/session'').should == {:controller > => ''sessions'', :action => ''create''} > undefined method `params_from'' for > #<RSpec::Core::ExampleGroup::Nested_15::Nested_2:0x458d348> > # > ./vendor/gems/actionpack-3.0.0.beta4/lib/action_dispatch/testing/assertions/routing.rb:175:in > `method_missing'' > # ./spec/controllers/sessions_controller_spec.rb:121 > > > Also note the ''RSpec::Core::ExampleGroup'': it seems like it doesn''t > correctly infer it should be RSpec::Rails::ControllerExampleGroup? > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
Ivo Wever
2010-Jun-24 13:12 UTC
[rspec-users] RSpec 2: what should I replace ''params_from'' with?
Hey,
Thanks, that works fine and makes sense. Now there are also a few specs
that assert the inverse direction:
describe SessionsController do
describe "route generation" do
it "should route the destroy sessions action correctly" do
route_for(:controller => ''sessions'', :action =>
''destroy'').should
== "/logout"
end
end
end
I understand the route_for method is similarly deprecated; what would be
the idiomatic way to spec that now?
> Note that the name RSpec::Rails::RoutingSpecMatchers might change in the
> next beta, so this is not a formal API or anything - just a workaround
> for you to get by until the next release.
>
OK, thanks for the warning. As we consciously chose to move to -beta
software, these kinds of things are expected :).
all the best,
--
Ivo
--
Posted via http://www.ruby-forum.com/.
David Chelimsky
2010-Jun-24 13:16 UTC
[rspec-users] RSpec 2: what should I replace ''params_from'' with?
On Jun 24, 2010, at 8:12 AM, Ivo Wever wrote:> Hey, > > Thanks, that works fine and makes sense. Now there are also a few specs > that assert the inverse direction: > > describe SessionsController do > describe "route generation" do > it "should route the destroy sessions action correctly" do > route_for(:controller => ''sessions'', :action => ''destroy'').should > == "/logout" > end > end > endroute_to delegates to assert_routing, which tests both sides (recognizes and generates).> I understand the route_for method is similarly deprecated; what would be > the idiomatic way to spec that now? > >> Note that the name RSpec::Rails::RoutingSpecMatchers might change in the >> next beta, so this is not a formal API or anything - just a workaround >> for you to get by until the next release. >> > OK, thanks for the warning. As we consciously chose to move to -beta > software, these kinds of things are expected :).