Ruby on Rails 3 - Devise & Rspec:即使在确认后,用户也需要在请求规范中激活帐户



我的请求规范中有以下代码:

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

登录用户似乎无法工作,即使该方法似乎工作正常。我试着在it 'is accessible' do块中使用login user,如果我这样做的话,这个规范可以很好地工作。如果我把它从那里移除,并像上面一样把它放在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和Rails3。我还在制作文件中将用户设置为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!还不够吗?

这可能是问题所在吗?

制造(:system_admin)!=制造商(:system_admin)

因此,如果您调试save_and_open_page,并且它告诉您帐户未激活,则表明您的捏造工作不正常。你试过调试吗?

你的saveandopenpage是做什么的?它是否试图利用用户做某事?因为我在用let定义时经历过,如果没有触摸变量(在这种情况下是用户),那么它就不存在于该上下文中。此外当你在上面运行这样的规范"是可访问的"时,会有什么错误?只是说没有用户登录?

因此,您可以为登录存根您的方法(例如,如果您有一个名为current_user的方法,它为您提供登录的用户或其他什么),或者不使用let,而是像一样灌输

user=制作(:system_admin)

但是这里有很多好的建议:

http://betterspecs.org/

你的区块上下文和描述似乎太复杂了。我也没有100%遵循这一指导方针,但我认为我应该从中受益,你也会从中受益。

如果你发现它不起作用的另一个原因,请告诉我!

我认为before(:each)应该解决的问题

添加此Devise方法:

confirmed_at { Time.now }

因此,您的after_create方法应该如下所示:

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

相关内容

  • 没有找到相关文章

最新更新