0

rspec と factory girl を使ってより良いテストを書こうとしています。ユーザー モデルをテストしようとしていますが、最初のテストが何度も失敗します。認証システムに Sorcery を使用していますが、ファクトリの記述方法の例があまり見つかりません。sorcery github リポジトリの問題からヒントを得ましたが、テストはまだ失敗しています。

ここに私のユーザー工場があります:

# spec/factories/users.rb

FactoryGirl.define do
  salt = "asdasdastr4325234324sdfds"
  factory :user do
     sequence(:username)   { |n| "testuser#{n}" }
     slug              :username
     email                 { "#{username}@example.com" }
     password              "secret"
     password_confirmation "secret"
     salt                  salt
     crypted_password      Sorcery::CryptoProviders::BCrypt.encrypt("secret", salt)
     admin                 false
   end
 end

これはモデル テストです。

# spec/models/user_spec.rb
require 'spec_helper'

describe User do
   it "has a valid factory" do
     FactoryGirl.create(:user).should be_valid
   end
end

ユーザーモデルは次のとおりです。

class User < ActiveRecord::Base
  authenticates_with_sorcery!

  # Use FriendlyId for better URLs
  extend FriendlyId
  friendly_id :username, :use => :slugged
  attr_accessible :username, :email, :password, :password_confirmation, :weburl, :time_zone, :bio

  validates_confirmation_of :password
  validates_presence_of :password, :on =>:create
  validates_presence_of :username
  validates_presence_of :email
  validates_uniqueness_of :username
  validates_uniqueness_of :email
end

そして、ここに私が得ているエラーがあります:

1) User has a valid factory
 Failure/Error: FactoryGirl.create(:user).should be_valid
  expected valid? to return true, got false
 # ./spec/models/user_spec.rb:6:in `block (2 levels) in <top (required)>'

user_spec.rb の 6 行目はFactoryGirl.create(:user).should be_valid

私は何かが欠けていると確信しています。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

0

工場は、ユーザーが無効であると言います。理由を理解するには、エラーを確認してください。

user = Factory.build(:user)
user.valid? # => false
user.errors.should be_empty # => fails, and prints the error hash
于 2012-08-24T22:09:07.203 に答える