2012-02-17 98 views
-1

我在從railstutorial.org上看到這個錯誤時遇到了這個錯誤。RSpec:未定義方法`name'爲零:NilClass

模型類:$ APPLICATION_HOME /應用/型號/ user.rb

# == Schema Information 
# 
# Table name: users 
# 
# id   :integer   not null, primary key 
# name  :string(255) 
# email  :string(255) 
# created_at :datetime  not null 
# updated_at :datetime  not null 
# 

class User < ActiveRecord::Base 

    attr_accessible :name, :email, :password, :password_confirmation 
    has_secure_password 

    #validations 
    validates :name, presence: true, length: { maximum: 50} 

    valid_email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, format: { with: valid_email_regex }, 
      uniqueness: { case_sensitive: false } 

    validates :password, length: { minimum: 6 } 

end 

查看頁面:$ APPLICATION_HOME /應用/視圖/ show.html.erb文件

<% provide :title, @user.name %> 
<h1><%= @user.name %></h1> 

RSpec的文件: $ APPLICATION_HOME /應用/規格/請求/ user_pages_spec.rb

require 'spec_helper' 

    describe "UserPages" do 

     subject { page } 

     describe "signup page" do 

     before { visit signup_path } 

     it { should have_selector('h1', text: "Sign up") } 
     it { should have_selector('title', text: full_title('Sign up')) } 

     end 

     describe "profile page" do 
     let(:user) { FactoryGirl.create(:user) } 
     before { visit user_path(user) } 

     it { should have_selector('h1', text: user.name) } 
     it { should have_selector('title', text: user.name) } 
     end 
    end 

這裏是factories.rb我已經把$ APPLICATI ON_HOME /規格/ factories.rb

FactoryGirl.define do 
    factory :user do 
    name  "amit" 
    email "[email protected]" 
    password "foobar" 
    end 
end 

的Gemfile

group :test do 
    gem 'capybara', '1.1.2' 
    gem 'factory_girl_rails' 
end 

這裏的快照是記錄在測試規範中我得到。

Failures: 

    1) UserPages profile page 
    Failure/Error: before { visit user_path(user) } 
    ActionView::Template::Error: 
     undefined method `name' for nil:NilClass 
    # ./app/views/users/show.html.erb:1:in `_app_views_users_show_html_erb__369651065_78543920' 
    # ./spec/requests/user_pages_spec.rb:18:in `block (3 levels) in <top (required)>' 

    2) UserPages profile page 
    Failure/Error: before { visit user_path(user) } 
    ActionView::Template::Error: 
     undefined method `name' for nil:NilClass 
    # ./app/views/users/show.html.erb:1:in `_app_views_users_show_html_erb__369651065_78543920' 
    # ./spec/requests/user_pages_spec.rb:18:in `block (3 levels) in <top (required)>' 

Finished in 0.68212 seconds 
12 examples, 2 failures 

的錯誤出現在這兩條線

it { should have_selector('h1', text: user.name) } 
it { should have_selector('title', text: user.name) } 

請幫我解決這些錯誤。

謝謝,阿米特·帕特爾

回答

4

這是錯字在$ APPLICATION_HOME /應用/控制器/ users_controller.rb

def show 
    @users = User.find(params[:id]) 
    end 

如果您發現,實例變量名使用複數(@users),我有在erb模板中使用單數名稱(@user)。這就是它失敗的原因。

相關問題