运行测试用例时,BCrypt :: Errors :: InvalidHash错误

问题描述

我一直试图通过本章的最后一个测试,但是我所有的测试都返回无效的哈希错误

这是错误

Failures:

  1) User 
     Failure/Error: password_digest: BCrypt::Password.create('foobar').to_s)
     BCrypt::Errors::InvalidHash:
       invalid hash
     # ./spec/models/user_spec.rb:20:in `block (2 levels) in <top (required)>'

  2) User 
     Failure/Error: password_digest: BCrypt::Password.create('foobar').to_s)
     BCrypt::Errors::InvalidHash:
       invalid hash
     # ./spec/models/user_spec.rb:20:in `block (2 levels) in <top (required)>'

  3) User 
     Failure/Error: password_digest: BCrypt::Password.create('foobar').to_s)
     BCrypt::Errors::InvalidHash:
       invalid hash
     # ./spec/models/user_spec.rb:20:in `block (2 levels) in <top (required)>'

  4) User 
     Failure/Error: password_digest: BCrypt::Password.create('foobar').to_s)
     BCrypt::Errors::InvalidHash:
       invalid hash
     # ./spec/models/user_spec.rb:20:in `block (2 levels) in <top (required)>'

  ...

Finished in 1.34 seconds
20 examples,20 failures

user.rb文件

class User < ActiveRecord::Base
  attr_accessible :name,:email,:password,:password_confirmation,:password_digest
  has_secure_password

  before_save { |user| user.email = email.downcase }

  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
end

user_spec.rb文件

require 'spec_helper'
require 'bcrypt'

describe User do

  before do
    @user = User.new(name: "Example User",email: "user@example.com",password: "foobar",password_confirmation: "foobar",password_digest: BCrypt::Password.create('foobar').to_s)
  end

  subject { @user }

  it { should respond_to(:name) }
  it { should respond_to(:email) }
  it { should respond_to(:password_digest) }
  it { should respond_to(:password) }
  it { should respond_to(:password_confirmation) }

  it { should be_valid }

  describe "when name is not present" do
    before { @user.name = " " }
    it { should_not be_valid }
  end

  describe "when email is not present" do
    before { @user.email = " " }
    it { should_not be_valid }
  end

  describe "when name is too long" do
    before { @user.name = "a" * 51 }
    it { should_not be_valid }
  end

  describe "when email format is invalid" do
    it "should be invalid" do
      addresses = %w[user@foo,com user_at_foo.org example.user@foo.
                     foo@bar_baz.com foo@bar+baz.com]
      addresses.each do |invalid_address|
        @user.email = invalid_address
        @user.should_not be_valid
      end
    end
  end

  describe "when email format is valid" do
    it "should be valid" do
      addresses = %w[user@foo.COM A_US-ER@f.b.org frst.lst@foo.jp a+b@baz.cn]
      addresses.each do |valid_address|
        @user.email = valid_address
        @user.should be_valid
      end
    end
  end

  describe "when email address is already taken" do
    before do
      user_with_same_email = @user.dup
      user_with_same_email.email = @user.email.upcase
      user_with_same_email.save
    end

    it { should_not be_valid }
  end

  describe "when password is not present" do
    before { @user.password = @user.password_confirmation = " " }
    it { should_not be_valid }
  end

  describe "when password doesn't match confirmation" do
    before { @user.password_confirmation = "mismatch" }
    it { should_not be_valid }
  end

  describe "when password confirmation is nil" do
    before { @user.password_confirmation = nil }
    it { should_not be_valid }
  end

  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

GemFile:

source 'https://rubygems.org'

gem 'rails','3.2.22.5'
gem 'bootstrap-sass','2.1'
gem 'bcrypt-ruby','3.0.1'

# Bundle edge Rails instead:
# gem 'rails',:git => 'git://github.com/rails/rails.git'

group :development,:test do
  gem 'sqlite3','1.3.5'
  gem 'rspec-rails','2.11.0'
end

group :development do
  gem 'annotate','2.5.0'
end

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails','3.2.5'
  gem 'coffee-rails','3.2.2'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer',:platforms => :ruby

  gem 'uglifier','1.2.3'
end

gem 'jquery-rails','2.0.2'

group :test do
  gem 'capybara','1.1.2'
end

group :production do
  gem 'pg','0.12.2'
end

gem 'rake','< 11.0'

我一直试图在控制台中随机分配一个具有相同结果的用户。试图更改bcrypt-3.1.12的gem,但它一直要求添加bcryptruby。决定复制并粘贴教程中的确切代码,问题依旧。

任何帮助将不胜感激,谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...