Ruby RSpec:nil:NilClass的未定义方法“name”
我在遵循railstutorial.org上的教程时遇到此错误 模型类:$APPLICATION\u HOME/app/models/user.rbRuby RSpec:nil:NilClass的未定义方法“name”,ruby,ruby-on-rails-3,rspec,factory-bot,Ruby,Ruby On Rails 3,Rspec,Factory Bot,我在遵循railstutorial.org上的教程时遇到此错误 模型类:$APPLICATION\u HOME/app/models/user.rb # == Schema Information # # Table name: users # # id :integer not null, primary key # name :string(255) # email :string(255) # created_at :datet
# == 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+\-.]+@[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
这里是factories.rb,我把它放在$APPLICATION\u HOME/spec/factories.rb中
FactoryGirl.define do
factory :user do
name "amit"
email "amit@gmail.com"
password "foobar"
end
end
文件的快照
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
请帮助我解决这些错误
谢谢,Amit Patel这是$APPLICATION\u HOME/app/controllers/users\u controller.rb中的打字错误
def show
@users = User.find(params[:id])
end
如果您注意到,实例变量名是复数@users,我在erb模板中使用了单数name@user。这就是它失败的原因
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) }
def show
@users = User.find(params[:id])
end