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

rspec, ruby-on-rails

Solution

First of all, check, if your action works as expected, to do so, add some output as the last line and see if it was printed. Then, you should use render_views if you want to test template rendering like this

require 'rails_helper'

describe CategoriesController do
  render_views
  login_user

  it "redirect when something went wrong" do
    get :index
    expect(response).to render_template("index")
  end
end

Problem

gemfile: ``` source 'https://rubygems.org' gem 'rails', '4.1.1' gem 'mysql2' gem 'sass-rails', '~> 4.0.3' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.0.0' gem 'jquery-rails' gem 'turbolinks' gem 'jbuilder', '~> 2.0' gem 'sdoc', '~> 0.4.0', group: :doc gem 'tzinfo-data', platforms: [:mingw, :mswin] gem 'devise' gem 'cancan' gem 'attr_encrypted' gem 'faker', '1.0.1' gem 'jdbc-mysql', '5.1.28', :platform => :jruby gem 'thinking-sphinx', '~> 3.1.0' gem 'kaminari' gem 'postmark-rails', '~> 0.5.0' gem 'slim-rails' gem 'strong_password', '~> 0.0.3' gem 'jquery-turbolinks' gem 'whenever', :require => false gem 'nokogiri' gem 'mechanize' gem 'prawn' gem 'render_csv', '~> 2.0.0' gem 'capistrano', '~> 3.2.0' group :development, :test do gem "capybara", "2.2.1" gem "cucumber-rails", "~> 1.3.0", require: false gem 'rspec-rails', '~> 3.0.0' gem "factory_girl_rails", "~> 4.1.0" end gem 'hirb', group: :development ``` spec/spec_helper.rb ``` ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment",__FILE__) require 'rspec/rails' require "capybara/rspec" include Capybara::DSL Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| config.include Devise::TestHelpers, :type => :controller config.extend ControllerMacros, :type => :controller end ``` spec/support/controller_macros.rb ``` module ControllerMacros def login_admin before(:each) do @request.env["devise.mapping"] = Devise.mappings[:admin] sign_in FactoryGirl.create(:admin) # Using factory girl as an example end end end ``` spec/factories/factory.rb ``` FactoryGirl.define do factory :user do email "test@test.com" password "12345678" end end ``` categories_controller.rb ``` class CategoriesController < ApplicationController before_filter :authenticate_user!, :load_key! def index @categories = Category.where("user_id is null or user_id = ?", current_user).order(updated_at: :desc) end private def category_params params.require(:category).permit(:title) end end ``` spec/controllers/categories_controller_spec.rb ``` require 'rails_helper' describe CategoriesController do login_user it "redirect when something went wrong" do get :index expect(response).to render_template("index") end end ``` Gives me: 1) CategoriesController redirect when something went wrong Failure/Error: expect(response).to render_template("index") expecting <"index"> but rendering with <[]>

Original source