0

私はこれに数時間苦労してきましたが、どこにも答えが見つかりません。

基本的に、shoulda を使用してモデルの仕様を作成しています。何らかの理由で、let が正常に動作し、実際のアプリケーションが正常に動作しているにもかかわらず (手動で要求仕様で確認)、以下を含める場合:

it { expect(user).to validate_uniqueness_of :email }

私の記述ブロックでは、次のエラーが発生します。

1) User attributes should require case sensitive unique value for email
 Failure/Error: it { expect(user).to validate_uniqueness_of :email }
 RuntimeError:
   Password digest missing on new record
 # ./spec/models/user_spec.rb:14:in `block (3 levels) in <top (required)>'

私は、この仕様を解決するのが妨げられるところまで来ましたが、これは決して良いことではありません。実装は既に機能しているためです。

物事を動かすためだけに、なんらかの理由で失敗しているテストをスキップし始めたくないので、誰かがここで私を助けてくれたら素晴らしいでしょう。

ダイジェストを保存するために has_secure_password に対して呼び出される before メソッドを rspec が「無視」しているように感じますが、よくわかりません。リクエスト仕様が正常に機能した場合、これは私が気付いていないことをしているので、私はただ推測しています。

Rails 4.0.0を使用しています

以下は、これに関連するコードです。助けていただければ幸いです。ありがとう

user_spec.rb

require  'spec_helper'

describe User do

  let(:user) { 
    user = User.new(:email => 'example@example.com', 
                    :username => 'theo', 
                    :password => 'secretpass',
                    :password_confirmation => 'secretpass')}

  describe "attributes" do

    it { expect(user).to validate_presence_of :email } 
    it { expect(user).to validate_uniqueness_of :email }

    it { expect(user).to validate_presence_of :username }
    it { expect(user).to validate_uniqueness_of :username }

    it "saves are saved" do
      user.save!
      expect(user).to be_valid
    end

  end  


end

user.rb

class User < ActiveRecord::Base
  has_secure_password


  validates :email, :username, presence: true, uniqueness: true
  validates :password, presence: true, :on => :create


end

users_controller.rb

class UsersController < ApplicationController
  def index
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)

    if @user.save
      redirect_to root_path, :notice => 'You have successfully signed up.'
    else
      render 'new'
    end
  end

  private

  def user_params
    params.require(:user).permit(:email, :username, :password, :password_confirmation)
  end
end
4

3 に答える 3

0

おそらくshoulda-matchersのバグで、おそらくこれに関連していますhttps://github.com/thoughtbot/shoulda-matchers/issues/290

乾杯

于 2013-07-15T11:59:19.520 に答える