Sunday, July 9, 2017

RSpec 2.3 + Devise 1.0.11

Leave a Comment

I've got a really old Rails 2.3.18, ruby 1.9.3, rspec 1.x application which we are upgrading and it had restful-authentication in it. So I've replaced that with Devise 1.0.11.

I can login to the application, but my tests will not run;

Here is the test in question

require 'spec_helper'  describe CategoriesController do   context "As a logged in user" do     before do       login_user       current_firm = mock_model(Firm, :id => 1)       controller.stub!(:current_firm).and_return(current_firm)     end      describe "#index" do       it "should render index" do         get :index         response.should render_template('index')       end     end    end end 

Here is the error I get;

NoMethodError in 'CategoriesController As a logged in user#index should render index' You have a nil object when you didn't expect it! You might have expected an instance of ActiveRecord::Base. The error occurred while evaluating nil.[]= /home/map7/code/pdfcat/spec/spec_helper.rb:18:in `login_user' spec/controllers/categories_controller_spec.rb:6:in `block (3 levels) in <top (required)>' 

The error happens on this line;

[20, 29] in /usr/local/rbenv/versions/1.9.3-p551/lib/ruby/gems/1.9.1/gems/warden-0.10.7/lib/warden/session_serializer.rb    20        key    21      end    22      23      def store(user, scope)    24        return unless user => 25        session[key_for(scope)] = serialize(user)    26      end 

The problem is 'session' is nil when I'm at this point.

I've pushed the full code to here: https://github.com/map7/pdfcat/tree/devise

My plan was to get devise working in the tests then I could jump to Rails 3.0 and continue the upgrade.

1 Answers

Answers 1

There's an old message in google groups that I think is relevant: https://groups.google.com/forum/#!topic/rspec/4AHuPtHFD34

It recommends using this:

before do   request.env['warden'].stub(:authenticate!) { double(User) } end 

I'd probably put it in rails_helper.rb so that it runs for all tests

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment