我是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
答案 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时会发生什么,它会返回用户记录。