我的请求规范中包含以下代码:
describe 'Poll' do
subject { page }
context 'as system admin' do
let(:user) { Fabricate(:system_admin) }
before { login user}
it 'is accessible' do
visit '/admin/poll'
current_path.should == '/admin/poll'
end
describe 'sending poll' do
it 'sends to all users' do
save_and_open_page
end
end
end
end
即使该方法似乎工作正常,登录用户似乎也不起作用。我尝试在login user
块中使用it 'is accessible' do
,如果我这样做,那么规格就可以了。如果我从那里删除它并将其放在如上所述的before
块中。用户没有保持登录状态。我输入save_and_open_page
进行调试,我在页面中收到此通知:
Your account was not activated yet. If a reset password link was sent to you, use that link to change your password.
我正在使用Devise,RSpec,Capybara和Rails 3.我还在我的Fabrication文件中将用户设置为confirm!
。以下是它的外观:
Fabricator(:system_admin) do
first_name { sequence(:first_name) { |n| "Person#{n}"} }
last_name { sequence(:last_name) {|n| "#{n}" } }
email { sequence(:email) { |n| "person_#{n}@example.com"} }
password "foobar"
password_confirmation "foobar"
company_name { sequence(:company_name) { |n| "google#{n}" } }
role "system_admin"
after_create do |user|
user.confirm!
user.create_company
end
end
问题:可能是什么问题?为什么用户不会保持登录状态?为什么我会收到消息说我应该激活我的帐户? user.confirm!
不够吗?
答案 0 :(得分:0)
这可能是问题吗?
Fabricate(:system_admin)!= Fabricator(:system_admin)
答案 1 :(得分:0)
因此,如果您调试save_and_open_page并且它告诉您该帐户未激活,则表明您的构建工作无法正常运行。你尝试过调试吗?
你的save_and_open_page做了什么?它是否试图将用户用于某事?因为我在使用let定义时,如果没有触及变量(在这种情况下是用户),那么它在该上下文中不存在。除了。当你运行像这样的规格“是不可访问的”时,错误是什么?只是说没有用户登录?
所以你可以存根你的方法进行登录(例如,如果你有一个叫做current_user的方法给你登录的用户或者其他东西)或者不是使用let,那么就像:
user = Fabricate(:system_admin)
但是嘿,这里有很多好的建议:
看起来你的块上下文和描述太复杂了。我也没有100%遵循这个指导方针,但我认为我应该这样做,你也会从中受益。
如果您发现其不起作用的另一个原因,请告诉我!
答案 2 :(得分:0)
我认为before(:each)
应解决问题
答案 3 :(得分:0)
添加此Devise方法:
confirmed_at { Time.now }
所以你的after_create方法应该是这样的:
after_create do |user|
user.confirm!
user.confirmed_at { Time.now }
user.create_company
end