2017-05-05 2 views
0

Ich überschreibe SessionsController in meinem eigenen Controller und versuchte, mit RSpec zu testen. Faust, ich Setup erarbeiten mitSo testen Sie Devise Sessions Controller mit RSpec

@request.env["devise.mapping"] = Devise.mappings[:user] 

meine spec:

require 'rails_helper' 

require 'authentication_helper'

RSpec.describe Benutzer :: SessionsController, Typ: Controller do umfassen AuthenticationHelper

beschreiben 'neue Sitzung erstellen' tun

before(:each) do 
    setup_auth 
end 

let(:user) {FactoryGirl.create(:user, username: 'john', email: '[email protected]', password: 'pwd1234')} 

it 'should return 200 with valid username and password' do 
    post :create, user: {login: 'john', password: 'pwd1234'} 

    expect(response).to have_http_status 200 
    expect(controller.current_user.id).to eq(user.id) 
end 

Ende Ende

mein SessionsController nur zurückkehren http 401 oder http 200. Wenn ich meinen spec laufen, bekomme ich diesen Fehler:

NoMethodError: nicht definierte Methode authenticate?' for nil:NilClass # /usr/local/bundle/gems/devise-3.5.6/app/controllers/devise_controller.rb:103:in require_no_authentication‘ # ./spec /controllers/users/sessions_controller_spec.rb:16:in block (3 levels) in <top (required)>' # ./spec/rails_helper.rb:45:in Block (3 Ebenen) in ' # /usr/local/bundle/gems/database_cleaner-1.6.0/lib/database_cleaner/generic/base.rb:16:in cleaning' # /usr/local/bundle/gems/database_cleaner-1.6.0/lib/database_cleaner/base.rb:98:in Reinigung ' #/usr/local/bundle/edelsteine ​​/ database_cleaner-1.6.0/lib/database_cleaner/configuration.rb: 86: in block (2 levels) in cleaning' # /usr/local/bundle/gems/database_cleaner-1.6.0/lib/database_cleaner/configuration.rb:87:in ruf ' # /usr/local/bundle/gems/database_cleaner-1.6.0/lib/database_cleaner/configuration.rb : 87: in cleaning' # ./spec/rails_helper.rb:44:in block (2 levels) in '

Was mache ich falsch?

Antwort

0

Sie sollten für das Zeichen einen Helfer haben, die zum Beispiel

module AuthenticationHelpers 
    module Controller 
     def sign_in(user) 
      controller.stub(:current_user).and_return(user) 
      controller.stub(:user_id).and_return(user.id) 
     end 
    end 

    module Feature 
     def sign_in(user, options={}) 
      visit "https://stackoverflow.com/users/sign_in" 
      fill_in "Email", with: user.email 
      fill_in "Password", with: options[:password] 
      click_button "Log in" 
     end 
    end 
end 

irgendwelche Bedenken, zögern Sie nicht,

+0

Es gibt keine Möglichkeit zu testen, nur meine Sitzungen Controller zu kommentieren? Ich führe Login von Ajax aus, deshalb möchte ich nur testen, ob mein Controller 200 und 401 korrekt zurückgibt. – jonatasdaniel

+0

Wie ich sehe, dass in der Spec-Datei _require 'authentication_helper'_ erforderlich ist, so denke ich, dass ich die Datei haben sollte – Andres23Ramirez

Verwandte Themen