Rspec控制器规范导致失败

时间:2015-02-03 05:25:22

标签: ruby-on-rails ruby rspec

当我运行'rake spec'时,我的RSIn for ResidenceInformations Controller导致失败。我的控制器代码如下

class ResidenceInformationsController < ApplicationController
  def index
  end

  def show
    render partial: 'subregion_select'
  end

  def new
    @residence_info = ResidenceInformation.new
    @saved_residence_info = ResidenceInformation.where('applicant_id=?', current_applicant.id)
  end

  def create
    @residence_info = ResidenceInformation.new(residence_informations_params)
    @residence_info.state = params[:order][:state]
    @residence_info.applicant_id = current_applicant.id
    #@residence_info.residence_type_id = params[:residence_type][:residence_type_id]
    @residence_info.save!
    if cookies[:residence_next] == 'true' && cookies[:add_another] == 'false'
      redirect_to new_employment_information_path
    elsif cookies[:residence_next] == 'false' && cookies[:add_another] == 'true'
      #cookies[:add_another] = 'false'
      redirect_to request.referer
    elsif cookies[:residence_next] == 'false' && cookies[:add_another] == 'false'
      redirect_to request.referer
    end
  end

  def edit
    @residence_info = ResidenceInformation.find(params[:id])
  end

  def update

  end

  def destroy
  end

  def subregion_options
    render partial: 'subregion_select'
  end

  private

  def residence_informations_params
    params.require(:residence_information).permit(:address1, :address2, :country, :state, :city, :zip, :reason_for_moving, :resident_since, :resident_upto, :was_notice_given, :monthly_rent, :residence_type_id, :applicant_id)
  end
end

这是我上面提到的控制器的spec文件

require 'rails_helper'

RSpec.describe ResidenceInformationsController, :type => :controller do

  describe 'GET #new' do

    login_applicant

    it 'should have a current_applicant' do
      subject.current_applicant.should_not be_nil
    end

    it 'assigns a new ResidenceInformation to @residenceinfo' do
      #residenceinfo = FactoryGirl.create(:residence_information, address1: 'dsada', country: 'india', state: 'wb', city: 'kolkata', zip: '700091', reason_for_moving: 'none', resident_since: '2015-01-05', was_notice_given: 'true', residence_type_id: 1, applicant_id: 13)
      #puts"****************#{residenceinfo.inspect}***********************"
      get :new
      assigns(:residenceinfo).should be_a_new(ResidenceInformation)
    end

    it 'renders the :new template' do
      get :new
      response.should render_template :new
    end

  end

  describe 'POST create' do

    login_applicant

    context 'with valid attributes' do

      it 'should have a current_applicant' do
        subject.current_applicant.should_not be_nil
      end

      it 'create a new ResidenceInformation' do
        expect{
          post :create, residenceinformation: FactoryGirl.create(:residence_information, address1: 'dsada', country: 'india', state: 'wb', city: 'kolkata', zip: '700091', reason_for_moving: 'none', resident_since: '2015-01-05', was_notice_given: 'true', residence_type_id: 1, applicant_id: 13)
        }.to change(ResidenceInformation, :count).by(1)
      end

    end

  end

end

运行此spec文件时出现以下错误

Failure/Error: assigns(:residenceinfo).should be_a_new(ResidenceInformation)
       expected nil to be a new ResidenceInformation(id: integer, address1: string, address2: string, country: string, state: string, city: string, zip: string, monthly_rent: integer, reason_for_moving: string, resident_since: date, resident_upto: date, was_notice_given: boolean, created_at: datetime, updated_at: datetime, residence_type_id: integer, applicant_id: integer)
     # ./spec/controllers/residence_informations_controller_spec.rb:17:in `block (3 levels) in <top (required)>'

因为我对RSpec来说是全新的,所以我很感激我从你这里得到的任何帮助。提前致谢

修改

抱歉,我给出了错误的spec文件。现在给出正确的

1 个答案:

答案 0 :(得分:0)

您的实例变量名为@residence_info,您正在检查:residenceinfo。尝试使用下划线:

assigns(:residence_info).should be_a_new(ResidenceInformation)