Rspec的控制器错误期待<“指数”>但<“”>渲染(Rspec contr

2019-08-01 23:03发布

新的测试,我挣扎得到一些控制器测试通过。

下面控制器测试引发错误:

   expecting <"index"> but rendering with <"">

我在我的控制器规格下列操作之一:

  require 'spec_helper'

  describe NasController do

  render_views
  login_user

  describe "GET #nas" do
      it "populates an array of devices" do
        @location = FactoryGirl.create(:location)
        @location.users << @current_user
        @nas = FactoryGirl.create(:nas, location_id: @location.id )      
        get :index
        assigns(:nas).should eq([@nas])
      end

      it "renders the :index view" do
        response.should render_template(:index)
      end
    end

在我的控制器宏,我有这样的:

  def login_user
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      @current_user = FactoryGirl.create(:user)
      @current_user.roles << Role.first
      sign_in @current_user
      User.current_user = @current_user
      @user = @current_user
      @ability = Ability.new(@current_user)
    end
  end

我使用的设计和康康舞,并跟着他们重新引导。 测试。 我相信我的用户是在之前签署,并可以查看索引行动的能力。

我能做些什么来获得测试通过?

- 更新1 -

控制器代码:

class NasController < ApplicationController
   before_filter :authenticate_user!
   load_and_authorize_resource

   respond_to :js

   def index

     if params[:location_id]
       ...
     else
     @nas = Nas.accessible_by(current_ability).page(params[:page]).order(sort_column + ' ' + sort_direction)

     respond_to do |format|
      format.html # show.html.erb
     end    
    end
  end

Answer 1:

我认为,如果你改变

it "renders the :index view" do
  response.should render_template(:index)
end

it "renders the :index view" do
  get :index
  response.should render_template(:index)
end

它应该工作。

更新:试试这个

it "renders the :index view" do
  @location = FactoryGirl.create(:location)
  @location.users << @current_user
  @nas = FactoryGirl.create(:nas, location_id: @location.id ) 
  get :index
  response.should render_template(:index)
end


Answer 2:

我设法解决我的结束这个错误,但如果我们不知道该同样的问题。

在我的设置,我有一个控制器宏,将通过每一个响应格式(HTML,JS,JSON等)循环并测试该格式下的规格。 像一个白痴,我实际上没有在所有脑干我的一些规格的JSON响应模板的是,我并没有意识到这将抛出一个错误,如果它不能真正找到模板。 所以这是我的问题。

试着在你的规格在您指定的格式如下图所示,并只写了名为index.html一些模拟模板在正确的文件夹,看看你得到同样的错误。

get :index, :format => "html"


文章来源: Rspec controller error expecting <“index”> but rendering with <“”>