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)
응용 프로그램 자체를 사용할 때 나는 사용자를 만들 수 있습니다. create
및 create!
을 사용해 보았습니다. 왜 수는 항상 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
사용자 테이블 설정은 무엇입니까? 그것은 창조가 일어나지 않을 수 있습니다 –
레일 콘솔에서 정보를 추가했습니다. –
'expected : 1 got : 0'은 매우 의심 스럽습니다. 3.이 코드는 귀하의 실제 코드를 대표합니까? 또한 테스트간에 DB를 쓸어가는 코드가 있습니까? –