2017-04-01 39 views
0

剛開始學習Rspec,我試圖在我的主頁上測試頁眉部分是否存在,然後再測試其餘頁面。Rails 5和Rspec 3.5:視圖中的application_controller方法部分

我的報頭部分採用從application_controller.rb

def current_user 
    @current_user ||= User.find_by(id: session[:user_id]) 
end 

一個CURRENT_USER方法測試

<% if current_user %> 
    <%= image_tag(current_user.image_url, size: "30", :class => "profile_image") %> 
    <% end %> 
    <ul class="nav navbar-nav navbar-right"> 
    <li><%= link_to "Home", root_path %></li> 
    <% if current_user %> 
     <li><%= link_to "TODOs", todos_path %></li> 
     <li><%= link_to "Log Out", logout_path, method: :delete %></li> 
    <% else %> 
     <li><%= link_to "Log In", 'auth/google' %></li> 
    <% end %> 

試圖測試我查看用戶是否被記錄:

require 'rails_helper' 

RSpec.describe "home_page/home.html.erb", type: :view do 
    context "When viewing the home page" do 

    it "the home page should render the _header partial" do 
     render :partial => "layouts/header" 

     expect(view).to render_template(:partial => 'header') 
    end 

    end 
end 

退貨

Failure/Error: <% if current_user %> 

ActionView::Template::Error: 
    undefined local variable or method `current_user' for #<#<Class:0x007fc9d85409f8>:0x007fc9d77a4858> 
    Did you mean? current_page? 

我想測試這兩個時,有一個登錄用戶,當沒有,但我不確定如何存根。

有什麼建議嗎?

回答

0

在你rails_helper你應該有......

require 'devise' 

RSpec.configure do |config| 
    # For Devise <= 4.1.0 
    # config.include Devise::Test::ControllerHelpers, :type => :controller 
    # Use the following instead if you are on Devise >= 4.1.1 
    config.include Devise::TestHelpers, :type => :controller 
end 

然後在你的測試,你可以做...

before(:each) do 
    user = User.create(name: 'John') # <-include other params as req'd 
    user.confirm! # if you're using devise's confirmable module 
    sign_in user 
end