2014-07-15 2 views
0

레코드를 만든 후 왜 0입니까?rspec에 포함 된 활성 레코드를 생성 할 수없는 이유는 무엇입니까?

require 'spec_helper' 
... 
describe "keep admin" do 

    its "Can't delete the only admin" do 
    user1 = User.create(username: 'user1', password: 'abc123', admin: true) 
    user2 = User.create(username: 'user2', password: 'def456', admin: true) 
    user3 = User.create(username: 'user3', password: 'ghi798', admin: true) 
    #User.delete_me(user1) currently commented out to be sure. 
    #User.delete_me(user2) 
    #User.delete_me(user3) 
    expect(User.where(admin: true).count).to eq 3 
    end 

end 

    1) keep admin Can't delete the only admin should eq 3 
    Failure/Error: expect(User.where(admin: true).count).to eq 3 

     expected: 3 
      got: 0 

     (compared using ==) 
    # ./spec/models/user_spec.rb:24:in `block (2 levels) in <top (required)>' 

Finished in 0.41264 seconds 
5 examples, 1 failure 

$ RAILS_ENV=test rails c 
User 
Loading test environment (Rails 3.2.17) 
2.0.0-p247 :001 > User 
=> User(id: integer, username: string, pwd_hashed: string, salt: string, 
created_at: datetime, updated_at: datetime, admin: boolean) 

응용 프로그램 자체를 사용할 때 나는 사용자를 만들 수 있습니다. createcreate!을 사용해 보았습니다. 왜 수는 항상 0입니까?

편집 - 전체 사용자 모델 -

class User < ActiveRecord::Base 
require 'digest/sha1' 
    attr_accessor :password_confirmation 
    attr_accessor :admin 

    validates_presence_of  :username 
    validates_uniqueness_of :username 
    validates_confirmation_of :password 
    validate :password_non_blank 

    def self.delete_me(user) 
    how_many_admins = User.where(admin: true).count 
    if how_many_admins > 1 
     puts "delete ok!" 
     user.delete 
    else 
     puts "delete not ok!" 
    end 
    end 

    def self.authenticate(name, password) 
    user = self.find_by_username(name) 
    if user 
     expected_password = encrypted_password(password, user.salt) 
     if user.pwd_hashed != expected_password 
     user = nil 
     end 
    end 
    user 
    end 
    def password 
    @password 
    end 

    def password=(pwd) 
    @password = pwd 
    return if pwd.blank? 
    create_new_salt 
    self.pwd_hashed = User.encrypted_password(self.password, self.salt) 
    end 

    def is_admin 
    admin ? 'Yes' : 'No' 
    end 

private 
    def password_non_blank 
    errors.add(:password, "Missing password") if pwd_hashed.blank? 
    end 

    def create_new_salt 
    self.salt = self.object_id.to_s + rand.to_s 
    end 

    def self.encrypted_password(password, salt) 
    string_to_hash = password + "wibble" + salt 
    Digest::SHA1.hexdigest(string_to_hash) 
    end 

end 
+0

사용자 테이블 설정은 무엇입니까? 그것은 창조가 일어나지 않을 수 있습니다 –

+0

레일 콘솔에서 정보를 추가했습니다. –

+2

'expected : 1 got : 0'은 매우 의심 스럽습니다. 3.이 코드는 귀하의 실제 코드를 대표합니까? 또한 테스트간에 DB를 쓸어가는 코드가 있습니까? –

답변

0

귀하의 관리자 속성이 있으므로 항상 0

를 반환합니다 admin에 해당하는 사용자를 계산, (때문에 attr_accessor에 대한 호출의) 데이터베이스에 지속되지 않는

실제로 확인을 제공하지 않으므로 비밀번호 확인이 실패한 것으로 보입니다.

관련 문제