On 26/02/2009, at 11:25 AM, David Chelimsky wrote:
On Thu, Feb 26, 2009 at 10:01 AM, Evgeny Bogdanov
<evgeny.bogda...@gmail.com> wrote:
Could somebody please explain me what I am doing wrong.
I am trying to spec create.rjs file, that is returned from my
controller.

render_template("create.rjs") works just fine,

however have_rjs fails with the following error:
'CommentsController while posting a comment renders a create.rjs
template when comment is successfully created in ajax request' FAILED
No RJS statement that replaces or inserts HTML content.

Thank you!
Evgeny

=====controller
 def create
   @comment.save

   respond_to do |format|
         format.js
   end
 end

=====create.rjs
comment_id = "comment_"+...@comment.id.to_s

page['add_comment'].hide
page.insert_html :top, 'comments_list', :partial => "comments/
comment", :locals => {:comment => @comment, :item => @item}
page.visual_effect :highlight, comment_id, :duration => 1

=====spec file
 it "renders a create.rjs template when comment is successfully
created in ajax request" do
   request.env["HTTP_ACCEPT"] = "application/javascript"
   post :create, :item_id => 1, :item_type => "Space", :comment =>
{:content => "text"}

   response.should render_template("create")
   response.should have_rjs
 end

Controller specs, by default, do not render templates. If you want to
specify the contents of a template from your controller spec, tell it
to integrate_views (hmmm - maybe we should change that to
render_views???)

describe MyController do
 integrate_views
 it "does something" do
   ...
 end
end

HTH,
David

I'd say it's a matter of perspective. The name "integrate_views" is suitable from the perspective of the views being integrated into the execution stack. The name "renders_views" is suitable from the perspective of identifying that a controller example group renders its views.
-Nick
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to