I recently changed my controller code:
def create @checklist_item = @checklist.items.build(params[:checklist_item]) if @checklist_item.save flash[:notice] = "Successfully created checklist item." redirect_to checklist_item_url(@checklist, @checklist_item) else render :action => 'new' end end
to
respond_to :html, :json def create @checklist_item = @checklist.items.build(params[:checklist_item]) if @checklist_item.save flash[:notice] = "Successfully created checklist item." end respond_with @checklist_item end
But my specification, which did a great job with my previous controller code, fails:
it "create action should render new template when model is invalid" do checklist_item.stub(:valid? => false) checklist.stub_chain(:items, :build => checklist_item) post :create, :checklist_id => checklist.id response.should render_template(:new) end
With an error:
1) Checklists::ItemsController create action should render new template when model is invalid Failure/Error: response.should render_template(:new) MiniTest::Assertion: Expected block to return true value.
I am not sure how to change the specification. Everything remains the same when I test it in a browser (a new one renders it).
source share