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 :).