2013-02-10 1 views
0

я следующий код в моих запросах спецификации:Разрабатывают и Rspec: Пользователь требует активации учетной записи в запросах SPEC даже после того, как подтвердил

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. 

Я использую Завещание, RSpec, Capybara и Rails 3. Я также набор пользователя до confirm! в моем файле Fabrication. Ниже, как это выглядит:

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

может возникнуть проблема?

Изготовить (: system_admin)! = Fabricator (: system_admin)

0

Так что, если вы отлаживать save_and_open_page и это говорит о том, что учетная запись не активирована она seemes ваш сфабриковать не работает должным образом. вы пробовали и отлаживали это?

Что делает ваша save_and_open_page? он пытается использовать пользователя для чего-то? потому что я испытал, когда был определен с let, если не затронул переменную (пользователь в этом случае), тогда она не существует в этом контексте. Кроме. Какая ошибка при запуске спецификаций, подобных этому, «доступно»? просто говорит, что пользователь не вошел в систему?

так что вы можете либо незавершенная свои методы для входа в систему (например, если у вас есть метод, называемый current_user, который дает вам вошедшего пользователя или что-то), или вместо того, чтобы использовать пусть, instiate как:

пользователя = Изготовить (: system_admin)

но эй есть много хороших советов здесь:

http://betterspecs.org/

, кажется, как ваши блоки контекста и описания слишком сложны. Я также не соблюдаю эти рекомендации на 100%, но я думаю, что должен, и вы тоже выиграете от этого.

дайте мне знать, если вы обнаружили другую причину, почему ее не работает!

0

Я думаю before(:each) должен решить проблему

0

Добавить этот метод DEViSE:

confirmed_at { Time.now } 

Таким образом, ваш after_create метод должен выглядеть так:

after_create do |user| 
     user.confirm! 
     user.confirmed_at { Time.now } 
     user.create_company 
    end