Hi all, I''m having trouble with rspec 1.1.4 and rjs In the controller: render :update do |page| page << ''added text'' end render :update do |page| page.replace_html :divid :partial => ''apartial'' end spec: response.should have_rjs #this should be successful for any rjs request; but fails response.should have_rjs(:replace_html) #no luck I have tried mocking the page object, but that also fails. e.g @page = mock(''page) @page.should_receive(:replace_html) What''s the best practice to validate rjs responses? Thanks in advance -- Posted via http://www.ruby-forum.com/.
On Jul 11, 2008, at 1:04 PM, Reggie Mr. wrote:> Hi all, > > I''m having trouble with rspec 1.1.4 and rjs > > response.should have_rjs #this should be successful for any rjs > request; but fails > > response.should have_rjs(:replace_html) #no luck > > I have tried mocking the page object, but that also fails. > > e.g > @page = mock(''page) > @page.should_receive(:replace_html) > > What''s the best practice to validate rjs responses?I use the ARTS plugin to validate RJS. (http://github.com/richpoirier/arts/tree/master ) After you install it, you can do things like: it "should render edit template" do do_get assert_rjs :page, ''error_div'', :hide assert_rjs :replace_html, "edit_div" assert_rjs :visual_effect, :scroll_to, ''edit_div'' assert_rjs :visual_effect, :highlight, "object_#{@object.id}" end Hope this helps!
On Fri, Jul 11, 2008 at 1:04 PM, Reggie Mr. <lists at ruby-forum.com> wrote:> Hi all, > > I''m having trouble with rspec 1.1.4 and rjs > > In the controller: > render :update do |page| > page << ''added text'' > end > > render :update do |page| > page.replace_html :divid :partial => ''apartial'' > end > > spec: > > response.should have_rjs #this should be successful for any rjs > request; but fails > > response.should have_rjs(:replace_html) #no luck > > I have tried mocking the page object, but that also fails. > > e.g > @page = mock(''page) > @page.should_receive(:replace_html) > > What''s the best practice to validate rjs responses? >I don''t like validating generated JavaScript code from framework methods (or well tested third party libraries) against helper methods which just use regular expression matching underneath the covers (like ARTS or the built-in Rails helpers). I like to let the framework and the third party libraries test that their generated JavaScript is correct and I like to make sure my code is just doing the right thing using mocks. The below is a spec that will ensure a "render :update" call inside a controller action works... describe SomeController, ''#foo'' do it "renders the items entry form" do page = mock("page") controller.expect_render(:update).and_yield(page) page.should_receive(:replace_html).with(:some_id, partial => "items/form") get :show, :id => 1, :expense_reimbursement_id => 2 end end And here''s the controller method: def show render :update do |page| page.replace_html :some_id, :partial => "Items/form" end end I like to keep my RJS separate from my controller as much as possible by pushing the code into external RJS files. This helps keep the controller simple and easily understandable. I know sometimes the controller action and the RJS are both so simple that it seems like overkill to separate them. This just becomes a judgment call by the developer. If the controller action or the inline RJS grows it''s pretty simple to extract an RJS file after the fact. When an RJS file becomes messy or difficult to understand you can refactor that into using Renderer objects. For more information see "Extract Renderer from RJS" in the Rails Refactoring Catalog: http://assets.en.oreilly.com/1/event/6/Refactoring%20Your%20Rails%20Application%20Paper.pdf -- Zach Dennis http://www.continuousthinking.com -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20080713/6575c9bd/attachment.html>