Hello All,
I am a rspec beginner and I am trying to find a way out to write
render expectation in controller spec.I used the following ways
render ‘/channels/createchannel.html.erb’
view.should_receive(:render).with(:action => “createchannel”)
ChannelsController.expect_render(:action => “createchannel”)
ChannelsController.render_template(:action => “createchannel”)
controller.expect_render(:action => “createchannel”)
controller.render_template(:action => “createchannel”)
All fail giving a NoMethodError
My spec is as follows
require File.dirname(FILE) + ‘/…/spec_helper’
describe ChannelsController do
it “should re-direct to create channel” do
Channel.stub!(:checkChannel?).and_return(1)
ChannelsController.expect_render(:action => “createchannel”)
#view.should_receive(:render).with(:action => "createchannel")
#render '/channels/createchannel.html.erb'
end
end
Can anyone please let me know how this can be fixed.?
Thanks & Regards
Chandrika
On Jul 12, 4:35am, Chandu80 [email protected] wrote:
ChannelsController.expect_render(:action => “createchannel”)
#view.should_receive(:render).with(:action => “createchannel”)
#render ‘/channels/createchannel.html.erb’
end
end
Can anyone please let me know how this can be fixed.?
Check out http://rspec.info/rails/writing/controllers.html
Basically you need to do a get or post (in your case probably
post :createchannel) and then there’s a response object you can have
expectations on, such as response.should
render_template(‘createchannel.html’).
Note, I’m not really sure what the
ChannelsController.expect_render(…) does, I’m unfamiliar with that
syntax.
Thanks,
\Peter
One good way to see how to write controller specs is to generate one
with script/generate (or rails generate if you’re using Rails 3). For
example, you could create a new rails app (or use your existing one),
and generate an rspec_scaffold. Something like this:
rails generate rspec_scaffold Widget name:string
… that will generate a controller spec that will work out of the box if
you are using default crud methods.
-Bryan