16

Rails、devise、rspec、factorygirl を使用:

私のサイト用にいくつかのテストを作成しようとしています。deviseの確認可能モデルを使用しているため、FactoryGirlでユーザーを作成すると、ユーザーが確認されません。

これは私の factory.rb です:

FactoryGirl.define do
  factory :user do
    full_name             "Aren Admin"
    email                 "aren@example.com"
    password              "arenaren"
    password_confirmation "arenaren"
    role_id               ADMIN
  end
end

そして、これは私のrspecテストファイルです:

require 'spec_helper'

describe "Admin pages" do

  subject { page }

  describe "home page" do
    let(:user) { FactoryGirl.create(:user) }
    before { visit admin_home_path }

    it { should have_content("#{ROLE_TYPES[user.role_id]}") }
  end
end

ユーザーが確認されていないため、エラーが発生します。周りを検索して、「確認」メソッドを使用する必要があると確信しています。それは factory.rb ファイルに属していますが、どこに置くべきかわかりません。

4

7 に答える 7

35

次のように、confirmed_at 属性を設定することもできます。私のために働く:

FactoryGirl.define do
  factory :user do
    full_name             "Aren Admin"
    email                 "aren@example.com"
    password              "arenaren"
    password_confirmation "arenaren"
    role_id               ADMIN
    confirmed_at          Time.now
  end
end
于 2012-08-25T20:52:32.777 に答える
24

さらに良いことに、次のことを行います (そうすれば、すべてのテスト スイートに対して before フィルターを作成する必要はありません)。

Factory.define :confirmed_user, :parent => :user do |f|
  f.after_create { |user| user.confirm! }
end

ここにあります: https://stackoverflow.com/a/4770075/1153149

非推奨でない構文を追加するための編集

FactoryGirl.define do |f|
  #Other factory definitions

  factory :confirmed_user, :parent => :user do
    after_create { |user| user.confirm! }
  end
end

編集 01/27 構文を再度更新するには

FactoryGirl.define do
  #Other factory definitions

  factory :confirmed_user, :parent => :user do
    after(:create) { |user| user.confirm! }
  end
end
于 2012-08-25T20:47:32.117 に答える
9

user.confirm!あなたのbeforeブロックで試してみてください

ここで見つけた

于 2012-08-25T20:44:33.503 に答える
2

Put the Devise confirmable logic in the after(:build) callback...

FactoryGirl.define do
  factory :user do
    after(:build) do |u|
      u.confirm!
      u.skip_confirmation_notification!
    end
 ...
end

For me, putting confirm! or skip_confirmation! in the after(:create) block caused validation errors on the email parameter and did not work.

于 2014-04-21T15:02:18.467 に答える
2

User次の行をファクトリ定義に追加します。

before(:create) { |user| user.skip_confirmation! }
于 2013-12-26T08:46:28.017 に答える