2

Rails アプリのテストをセットアップしようとしています。認証にソーサリーでファクトリーガールとRspecを使用しています。何らかの理由で、このテストに合格しません:

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

しかし、これは次のことを行います:

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

失敗したテストのエラーは、パスワードがその確認と一致しなかったことを示していたため、これは Sorcery がパスワード暗号化を処理する方法と関係があるようです。

他の誰かがこの問題に遭遇しましたか? Sorcery がパスワードを暗号化する方法と関係がありますか? 意図的ですか、それともバグですか?

4

2 に答える 2

2

build構築されたオブジェクトは実際には有効なオブジェクトですが、メモリ内にのみ存在するため、有効です。

は失敗したcreateため無効です。save

保存に失敗する理由はアクティベーションにあると思います。私はソーサリーの経験はありませんが、デバイスのみ、原則は似ています. README によると、Sorcery はデフォルトでアクティベーションを求めているようです。

作成後にアクティブ化のフックを追加することにより、ファクトリ定義で直接修正するのは簡単です。

FactoryGirl.define do
  factory :user do
    # other fields
    after(:create) { |user| user.activate! }
  end
end
于 2013-05-18T03:56:43.630 に答える
0

OK、ユーザー定義を FactoryGirl に追加する必要があります。

factory :user do
  ...
  password "foobar"
  password_confirmation "foobar"
end

モデルは次のようになります。

class User < ActiveRecord::Base
  authenticates_with_sorcery!
  validates :password, confirmation: true  
  validates :password_confirmation, presence: true
end

そして、それは間違いなく機能します。

アクティベーションや暗号化には何もありません。

于 2014-07-25T07:15:34.337 に答える