views:

723

answers:

1

Im getting the errors below despite following the documentation.

In test_helper.rb

ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require "authlogic/test_case"
require 'test_help'
require 'shoulda'
require File.dirname(__FILE__) + "/factories"

In my functional test require 'test_helper'

class SentencesControllerTest < ActionController::TestCase
  setup do
    :activate_authlogic
  end

  context "logged in" do
    setup do
      @user = Factory(:user)
      UserSession.create(@user.id)
    end

    context "on GET to :new" do
      setup do
        get :new
      end

      should "present form with text field" do
        assert_select('form#new_sentence') do
          assert_select('textarea#sentence_text')
        end
      end
    end
  end #context logged in.
end

in environments.rb

  config.gem "authlogic"

Im not sure why it isnt working. Can anyone help out on this?

Authlogic::Session::Activation::NotActivatedError: You must activate the Authlogic::Session::Base.controller with a controller object before creating objects
authlogic (2.1.3) lib/authlogic/session/activation.rb:47:in `initialize'
    authlogic (2.1.3) lib/authlogic/session/klass.rb:64:in `initialize'
    authlogic (2.1.3) lib/authlogic/session/scopes.rb:79:in `initialize'
    authlogic (2.1.3) lib/authlogic/session/existence.rb:29:in `new'
    authlogic (2.1.3) lib/authlogic/session/existence.rb:29:in `create'
    test/functional/sentences_controller_test.rb:11:in `__bind_1270172858_922804'
    shoulda (2.10.3) lib/shoulda/context.rb:380:in `call'
    shoulda (2.10.3) lib/shoulda/context.rb:380:in `run_current_setup_blocks'
    shoulda (2.10.3) lib/shoulda/context.rb:379:in `each'
    shoulda (2.10.3) lib/shoulda/context.rb:379:in `run_current_setup_blocks'
    shoulda (2.10.3) lib/shoulda/context.rb:371:in `run_all_setup_blocks'
    shoulda (2.10.3) lib/shoulda/context.rb:375:in `run_parent_setup_blocks'
    shoulda (2.10.3) lib/shoulda/context.rb:359:in `test: logged in on GET to :new should present form with text field. '
    /opt/rubymine/rb/testing/patch/testunit/test/unit/ui/testrunnermediator.rb:36:in `run_suite'
    /opt/rubymine/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:215:in `start_mediator'
    /opt/rubymine/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:191:in `start'
+4  A: 

Should:

class SentencesControllerTest < ActionController::TestCase

  setup do
    :activate_authlogic
  end

  ...

be:

class SentencesControllerTest < ActionController::TestCase

  def setup              # setup should be its own method, prefixed with "def"
    activate_authlogic   # note the lack of a ":"
  end

  ...

If, alternatively, you're following the Rails testing tutorial, it may have a single-line setup deal like:

setup :activate_authlogic  # note the USE of a ":" here - not sure why it's different between this and when you put it in its own method but that might be the answer for you
normalocity
well spotted! thank you very much
adam
you got it - my pleasure
normalocity
OMG, thanks! I've been struggling with this for hours!
Edward M Smith