2017-06-29 14 views
6

Mam naprawdę starą aplikację Rails 2.3.18, ruby ​​1.9.3, rspec 1.x, którą aktualizujemy i mieliśmy w niej niezawodne uwierzytelnianie. Wymieniłem to na Devise 1.0.11.RSpec 2.3 + Devise 1.0.11

Mogę zalogować się do aplikacji, ale moje testy nie będą działać;

Oto dany test

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 

Tutaj jest błąd pojawia się;

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)>' 

Błąd występuje w tym wierszu;

[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 

Problem polega na tym, że "sesja" jest zerowa, gdy jestem w tym momencie.

ja popchnął pełny kod tutaj: https://github.com/map7/pdfcat/tree/devise

Mój plan był, aby opracować pracuje w testach wtedy będę mógł przejść do Rails 3.0 i kontynuować aktualizację.

+0

Myślę, że problem jest w metodzie sing_in z pliku spec_helper.rb. Przypuszczam, że ten pomysł zmień tę metodę w nowej wersji. Myślę, że sesja powinna być zerowa w teście env –

+0

Sign_in jest jednak częścią programu i myślę, że nazywam to poprawnie. – map7

Odpowiedz

1

Jest takie stare wiadomości w grupach Google, która moim zdaniem jest istotne: https://groups.google.com/forum/#!topic/rspec/4AHuPtHFD34

To zaleca stosowanie tego:

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

pewnie bym go umieścić w rails_helper.rb tak, że działa dla wszystkich testy

+0

Pojawia się błąd "nie można zmodyfikować zamrożonego obiektu", gdy umieściłem to w przed blcok mojego pliku testowego. Jeśli wstawię go do mojej szyny, otrzymam błąd, który nie może wywołać env na nilClass, odwołując się do obiektu "request". – map7

Powiązane problemy