Rspec,如何测试响应是否呈现模板

时间:2014-07-28 18:38:06

标签: ruby-on-rails ruby rspec

我是rspec的新手并且正在编写测试。我需要为我的VideosController的show动作编写一个测试。这是我的测试

describe VideosController do
  describe "GET show" do
    it "renders the show template" do
      video = Video.create(title: "Game of Thrones", description: "A very awesome show!")
      get :show, id: video.id
      expect(response).to render_template(:show)
    end
  end
end

当我运行此操作时,我收到此错误

 1) VideosController GET show renders the show template
 Failure/Error: expect(response).to render_template(:show)
   expecting <"show"> but rendering with <[]>

我在这里缺少什么?

编辑:VideosController

class VideosController < ApplicationController

  before_action :require_user

  def show
    @video = Video.find(params[:id])
  end

  def search
    @search_phrase = params[:search_term]
    @search_result = Video.search_by_title(@search_phrase)
  end

  end

1 个答案:

答案 0 :(得分:1)

对于设置用户,控制器测试旨在与应用程序的其他方面隔离。所以你真的可以简单地存根用户。如果您在应用程序控制器中使用了一种方法,例如:

def current_user
  @current_user ||= User.find session[:user_id]
end

然后你可以把它存根:

controller.stub(current_user: User.create(email: "test@example.com", password: "abc123", password_confirmation: "abc123"))

根据需要调整用户参数。另外,不要直接调用活动记录,而是查看:http://github.com/thoughtbot/factory_girl

那么当控制器调用current_user时会发生什么,它会返回用户记录。