2016-05-03 21 views
1

Ich habe Rails 4.2.6 und rspec 3.3.0, entwickeln Version 3.5.8 und ich habe Probleme, meine Controller-Spezifikationen immer Fehler zu erhalten, (" erwartet, dass die Antwort einen Erfolgsstatus Code hat (2xx), aber es war 401 „) Später, als ich verschiedene spec versuche ich immer bin immer Fehlermeldung (“ Ihr Konto noch nicht aktiviert ist! "), jeder Ideen?, jede Hilfe sehr geschätzt.Rails 4 Test-Controller-Spezifikation, Devicehelfer sign_in funktioniert nicht

meine Spezifikation:

require 'rails_helper' 

describe MyController, :type => :controller 
    let(:user)   { create(:user) } 
    let(:campaign)  { create(:campaign, user: user) } 
    let!(:placement) { create(:placement, user: user, campaign: campaign, end_date: Date.today) } 

    before(:each) do 
    sign_in user 
    end 
    context "when we have no data" do 
    before do 
     get :graph_data, format: :json 
     @json = JSON.parse(response.body) 
    end 

    it "should be a success" do 
     expect(response).to have_http_status(:success) 
    end 
    end 
end 

Ich habe folgende spec_helper:

config.include Devise::TestHelpers, :type => :controller 
config.before(:each) do 
    DatabaseCleaner.start 
end 

Werk definiert:

FactoryGirl.define do 
    factory :unconfirmed_user, class: User do 
    sequence(:email) { |n| "john#{n}@email.com" } 
    sequence(:name) { |n| "John Nice #{n}" } 
    password 'password' 
    password_confirmation 'password' 

    factory :user do 
     confirmed_at Time.now.utc 

     factory :admin do 
     organisation { create(:organisation, :some_organisation) } 
     end 
    end 
end 

Controller:

MyController < ApplicationController 
    def graph_data 
    items = current_user.items   //outputs [1,2,3,45,5] 
    render json: items, status: :ok 
    end 
end 

Routen:

GET /mycontroller/graph_data(.:format)         
+0

Haben Sie überprüft, ob Ihr Benutzer tatsächlich erstellt wird? Ich könnte mir vorstellen, dass Sie Probleme mit dem Feld password_confirmation haben – Richlewis

+0

ja ich habe es überprüft und Benutzer wurde tatsächlich erstellt – violentr

+0

haben Sie: Bestätigungsfähig mit Ihrer Geräte-Setup aktiviert? – Richlewis

Antwort

0

Ich fand, was das Problem war, auf Benutzermodell hatte eine Methode 'active_for_authentication?'

def active_for_authentication? 
    super && (group.include?('company-group) || is_admin?) 
end 

Methode 'active_for_authentication?' ist eine öffentliche Devise Methode und wenn es in Ihrem Modell wie (Benutzer) definiert ist, ändern Sie das Verhalten von ihm, und in meinem Fall wurde es mit anderem Verhalten überschrieben, Suche nach zugehörigem Benutzer der 'Firmengruppe' oder nicht .. Deshalb hatte ich Fehlermeldung ("Ihr Konto ist noch nicht aktiviert!")