[英]NoMethodError undefined method `save' for nil:NilClass
What do I need to do to fix this? 我需要做什么来解决这个问题? I am new to ruby on rails. 我是红宝石的新手。
Error when rspec is ran 运行rspec时出错
1) remember token should have a nonblank remember token
Failure/Error: before { @user.save }
NoMethodError:
undefined method `save' for nil:NilClass
# ./spec/models/user_spec.rb:125:in `block (2 levels) in <top (required)>'
user_spec.rb user_spec.rb
require 'spec_helper'
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar")
end
.
.
.
it { should respond_to(:remember_token) }
.
.
.
describe "with a password that's too short" do
before { @user.password = @user.password_confirmation = "a" * 5 }
it { should be_invalid }
end
describe "return value of authenticate method" do
before { @user.save }
let(:found_user) { User.find_by_email(@user.email) }
describe "with valid password" do
it { should == found_user.authenticate(@user.password) }
end
describe "with invalid password" do
let(:user_for_invalid_password) { found_user.authenticate("invalid") }
it { should_not == user_for_invalid_password }
specify { user_for_invalid_password.should be_false }
end
end
end
describe "remember token" do
before { @user.save }
it "should have a nonblank remember token" do
subject.remember_token.should_not be_blank
end
end
user.rb user.rb
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
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 }
validates :password_confirmation, presence: true
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end
It looks like this block of code 看起来像这段代码
describe "remember token" do
is outside the block 在街区之外
describe User do
...
end
If you move it inside the block, then it will have the before action fire that creates the @user object (which you then save in your own before block) 如果将其移动到块中,则它将具有创建@user对象的before操作火(然后将其保存在自己的before块中)
the @user variable will be not found, so @user变量将找不到,因此
you should move describe "remember token" inside -> 您应该在内部移动描述“记住令牌”->
describe User do
//current definitions
describe "remember token" do
before { @user.save }
it "should have a nonblank remember token" do
subject.remember_token.should_not be_blank
end
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.