刚刚添加bcrypt
了一个password_digest
列到数据库。现在,我收到此错误。就是说它不识别名字,这个测试通过了。现在失败了。所有其他测试都通过了(password_digest
奇怪的是,其中之一)。我正在使用Rails附带的测试框架。
def test_can_create_profiles
user = create_user('[email protected]', 'hassan') #creates a profile with randomized password
assert_equal "hassan", User.find_by_email('[email protected]').name
end
捆绑执行佣金测试
1) Error:
UserTest#test_can_create_profiles:
NoMethodError: undefined method `name' for nil:NilClass
test/models/user_test.rb:9:in `test_can_create_profiles'
class User < ActiveRecord::Base
email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
before_save {self.email = email.downcase}
validates :name, presence: true, length: { maximum: 20 }
validates :email, :presence => true,
:format => { :with => email_regex },
:uniqueness => { :case_sensitive =>
false }
has_secure_password
end
如果有任何我缺少的信息,请告诉我。
def create_user(email, name)
user = User.new(name: name, email: email)
user.password_digest = (0...8).map { (65 + rand(26)).chr }.join
user.save
user
end
GHGH
x = User.new
=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
irb(main):002:0> x.name ='lol'
=> "lol"
irb(main):005:0> x.email = '[email protected]'
=> "[email protected]"
irb(main):007:0> x.password_digest = 'lol'
=> "lol"
irb(main):008:0> x.save
(0.1ms) begin transaction
User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('[email protected]') LIMIT 1
(0.1ms) rollback transaction
=> false
好的,问题出在这里!
irb(main):010:0> raise x.errors.inspect
RuntimeError: #<ActiveModel::Errors:0x007f6fae5b3bf8 @base=#<User id: nil, name: "lol", email: "[email protected]", created_at: nil, updated_at: nil, password_digest: "lol">, @messages={:password=>["can't be blank"]}>
irb(main):013:0> raise x.password= 'hello'
RuntimeError: hello
from (irb):13
from /home/user/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/commands/console.rb:90:in `start'
from /home/user/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/commands/console.rb:9:in `start'
from /home/user/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/commands.rb:62:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
irb(main):014:0> raise x.errors.inspect
RuntimeError: #<ActiveModel::Errors:0x007f6fae5b3bf8 @base=#<User id: nil, name: "lol", email: "[email protected]", created_at: nil, updated_at: nil, password_digest: "$2a$10$CMPQdQSLKQTS5r0G2a1oheDhblzxcp65KxStZbKKAHmy...">, @messages={:password=>["can't be blank"]}>
from (irb):14
from /home/user/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1
::c
为什么会这样呢?
编辑:bcrypt要求输入password和password_confirmation字段。
那就是造成麻烦以及测试失败的原因。>。<
假设您的create_user
方法成功保存了一个User
对象,则问题很简单:
您正在保存电子邮件地址[email protected]
并尝试检索[email protected]
。
如果仍不能解决问题,请发布您的create_user
方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句