Metoda Metoda undefined NofethodError `save 'pentru zero: NilClass

Ce trebuie să fac pentru a rezolva asta? Sunt nou la rubin pe șine.

Eroare la rularea 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 '

user_spec.rb

require 'spec_helper'
describe User do

 before do
@user = User.new(name: "Example User", email: "[email protected]",
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

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+\-.][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 }
      validates :password_confirmation, presence: true

      private
      def create_remember_token
        self.remember_token = SecureRandom.urlsafe_base64
      end
    end
0

2 răspunsuri

Se pare că acest bloc de cod

describe "remember token" do

se află în afara blocului

describe User do
  ...
end

Dacă îl mutați în interiorul blocului, atunci acesta va avea focul înainte de acțiunea care creează obiectul @user (pe care apoi îl salvați în propriul dvs. bloc înainte)

0
adăugat

variabila @user nu va fi găsită, deci

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
0
adăugat