I am working on Rspec for Controller testing.I am initial leve of
rspec.I have a problem that in Spec/controller directory rspec file is
not taking controller property as (instance varibale,flash notice)
My controller code is as follow

class PortalNewsController < ApplicationController

  def index
    redirect_to root_path
  end
   def show
    @portal_news = PortalNews.find(params[:id])
    respond_to do |format|
      format.html {render :action => 'show', :layout => false}#
show.html.erb
      format.xml  { render :xml => @portal_news }
    end
  end

  # GET /portal_news/new
  # GET /portal_news/new.xml
  def new
    @portal_news = PortalNews.new
    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @portal_news }
    end
  end

  # GET /portal_news/1/edit
  def edit
    @portal_news = PortalNews.find(params[:id])
  end

  # POST /portal_news
  # POST /portal_news.xml
  def create
    @portal_news = PortalNews.new(params[:portal_news])
    puts "arundjfhdjfh"
    respond_to do |format|
      if @portal_news.save
        flash[:notice] = 'PortalNews was successfully created.'
        format.html { redirect_to root_path }
        format.xml  { render :xml => @portal_news, :status => :created,
:location => @portal_news }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @portal_news.errors, :status =>
:unprocessable_entity }
      end
    end
  end

  # PUT /portal_news/1
  # PUT /portal_news/1.xml
  def update
    @portal_news = PortalNews.find(params[:id])

    respond_to do |format|
      if @portal_news.update_attributes(params[:portal_news])
        flash[:notice] = 'PortalNews was successfully updated.'
        format.html { redirect_to root_path }
        format.xml  { head :ok }
      else
        flash[:notice] = 'PortalNews was not successfully updated.'
        format.html { render :action => "edit" }
        format.xml  { render :xml => @portal_news.errors, :status =>
:unprocessable_entity }
      end
    end
  end

  # DELETE /portal_news/1
  # DELETE /portal_news/1.xml
  def destroy
    @portal_news = PortalNews.find(params[:id])
    @portal_news.destroy

    respond_to do |format|
      format.html { redirect_to root_path }
      format.xml  { head :ok }
    end
  end

  private

  # Check for superadmin
  def is_superadmin?
    if !current_user.is_superadmin
      flash[:error] = "Permission denied."
      redirect_to root_path
    end
  end
end

And my rspec file code is
rspec/controllers/portal_news_controller_spec.rb
require File.dirname(__FILE__) +'/../spec_helper'

describe PortalNewsController do
  integrate_views :true
  controller_name :portal_news


  it "should_be_redirect_to_root_path" do
    get :index
    response.should redirect_to('/login')
  end




  it "should_show " do
    PortalNews.any_instance.stubs(:find).returns(@portal_news)
    PortalNews.any_instance.stubs(:show).returns(true)
    get :show, :id=>1
    response.should render_template('show')

  end

  it "should_redirect_to_root_with_successfull_notice" do


    post :create,:heading=>nil
    assigns[:portal_news].errors.on(:heading).should_not be_nil
    flash[:error].should_not be_nil

  end
  it "should_re-render_new_template_on_failed_save" do
    PortalNews.any_instance.stubs(:valid?).returns(false)
    post :create
    assigns[:portal_news].should be_new_record
    flash[:notice].should be_nil
    response.should render_template('http://test.host/portal_news/new')
  end

  it"should_pass_the_param_value" do
    post :create,:portal_news => {:user_id => 11}
    assigns[:portal_news].user_id.should =11

  end

  it "should_be update_on_valid_attributes" do

    PortalNews.any_instance.stubs(:find).returns(@portal_news)
    
PortalNews.any_instance.stubs(:update_attributes).with(@portal_news).returns(true)
    put :update, :id =>23
    response.should redirect_to('/login')
    flash[:notice].should_not be_nil
  end
  it "should_be update_on_invalid_attributes" do

    PortalNews.any_instance.stubs(:find).returns(@portal_news)
    
PortalNews.any_instance.stubs(:update_attributes).with(@portal_news).returns(false)
    put :update, :id =>23
    response.should redirect_to('/login')
    flash[:notice].should_not be_nil
  end
  it "should_check_variable" do
    put :update,:id =>{:user_id =>11}
    assigns[:id].user_id.should =11
  end
end

And i am geeting error as follow

1  NoMethodError in 'PortalNewsController
should_redirect_to_root_with_successfull_notice'
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.errors

2 NoMethodError in 'PortalNewsController
should_re-render_new_template_on_failed_save'
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.new_record?

-----
Please post solution of this problem


3 NoMethodError in 'PortalNewsController should_pass_the_param_value'
undefined method `user_id' for nil:NilClass

-- 
Posted via http://www.ruby-forum.com/.
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to