0

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

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 userit '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。我还在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!不够吗?

4

4 回答 4

0

添加此设计方法:

confirmed_at { Time.now }

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

  after_create do |user|
      user.confirm!
      user.confirmed_at { Time.now }
      user.create_company
  end
于 2013-04-09T00:11:08.333 回答
0

因此,如果您调试您的 save_and_open_page 并且它告诉您该帐户未激活,那么您的制造似乎无法正常工作。您是否尝试过调试?

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

所以你可以存根你的登录方法(例如,如果你有一个名为 current_user 的方法,它可以为你提供登录用户或其他东西),或者不使用 let,启动如下:

用户 = 制造(:system_admin)

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

http://betterspecs.org/

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

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

于 2013-02-15T21:09:16.400 回答
0

这可能是问题吗?

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

于 2013-02-10T21:23:11.190 回答
0

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

于 2013-02-18T22:45:07.240 回答