2

我知道这个问题已被多次回答,但现有的答案并不能解决我的问题。

我想为控制器运行我的 rspec 测试。我需要通过 Authlogic 对用户进行身份验证。

正如你们中的许多人所说(在其他类似问题中),我添加到spec_helper.rb文件中:

require "authlogic/test_case"
include Authlogic::TestCase

我的 events_controller_spec.rb之前的activate_authlogic

...
  before :each do
    activate_authlogic
    user = FactoryGirl.create(:user)
    UserSession.create(user)
  end
...

但是运行 rspec,我总是收到臭名昭著的错误消息:

Failure/Error: UserSession.create(user)
     Authlogic::Session::Activation::NotActivatedError:
       You must activate the Authlogic::Session::Base.controller with a controller object before creating objects

你能看出它有什么问题吗?

任何建议都非常受欢迎。

谢谢!

附言。

使用的版本: - rails 3.2 - rspec (2.11.0) - rspec-core (2.11.1)

4

3 回答 3

3

尝试使用setup :activate_authlogicorAuthlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)代替activate_authlogic,也许它会有所帮助

于 2013-02-22T15:16:16.357 回答
3

我不明白您是否找到了解决方案,但这是我用于 Rspec 控制器的代码。您可以在会话创建之前捕获无效用户的错误!

规范/spec_helper.rb

def log_in(user)
  user.should_not be_nil
  session = UserSession.create!(user, false)
  session.should be_valid
  session.save
end

规格/控制器/...

require 'spec_helper'
require 'authlogic/test_case'

describe xxxController do
  setup :activate_authlogic

  context "user logged" do
    before(:each) do
      @user = Factory(:user)
      log_in(@user)
    end
  end
end
于 2013-02-27T13:42:00.317 回答
0

经过多次尝试,我发现了不止一个问题:

  • FactoryGirl 创建的用户不是有效用户
  • 而不是“之前:每个”,有时我尝试“之前:所有”,这给我的错误修复增加了噪音

对不起“没那么有用”的问题:)

于 2013-02-23T19:44:54.960 回答