使用rails,devise,rspec& factorygirl:
尝试为我的网站创建一些测试。我正在使用确认模型进行设计,因此当我使用FactoryGirl创建用户时,用户未得到确认。
这是我的个工厂.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
我收到错误,因为用户未得到确认。通过搜索我很确定我需要使用'确认'方法!并且它属于factories.rb文件,但我不知道该放在哪里。
答案 0 :(得分:34)
您还可以按如下方式设置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
答案 1 :(得分:23)
更好的是,执行以下操作(然后您不需要为每个测试套件创建一个前置过滤器)
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
答案 2 :(得分:9)
在user.confirm!
区块中尝试before
找到here
答案 3 :(得分:2)
这是为我工作的工厂
FactoryGirl.define do
factory :user do
sequence :email do |n|
"address#{n}@example.com"
end
sequence :password do |n|
"password#{n}"
end
factory :confirmed_user do
before(:create) {|user| user.skip_confirmation! }
end
end
end
答案 4 :(得分:1)
在工厂定义中添加此行对我有用
before(:create){| user | user.skip_confirmation! }
答案 5 :(得分:1)
将Devise可确认逻辑放入after(:build)回调...
FactoryGirl.define do
factory :user do
after(:build) do |u|
u.confirm!
u.skip_confirmation_notification!
end
...
end
对我来说,确认一下!或skip_confirmation!在after(:create)块中导致了email参数的验证错误,但没有用。
答案 6 :(得分:1)
您应该在skip_confirmation!
之前致电create
,以便用户保留此信息。
before(:create) do |user|
user.skip_confirmation!
end