2016-07-18 12 views
0

Ich versuche, das folgende zu spezifizieren.Anmeldung als ein bestimmter Benutzer mit RSpec

Ich muss alle Entitäten zurückgeben, die mit dem angemeldeten Benutzer verknüpft sind. Anschließend muss ich den Benutzer vor der Tatsache erstellen und dann sicherstellen, dass der bestimmte Benutzer angemeldet ist. Ich habe Mühe, dies mit Controller-Makros zu erreichen. Meine Angaben versagen wie folgt

1) YouGov :: Umfragen :: ProfilesController GET: Index gibt alle verknüpften Profile der loged in Benutzer mit dem gleichen Land und Client als verknüpfte Umfrage Ausfall/Fehler: sign_in Benutzer

RuntimeError: 
    Could not find a valid mapping for nil 
# /Users/donovan.thomson/.rvm/gems/[email protected]/gems/devise-2.2.8/lib/devise/mapping.rb:42:in `find_scope!' 
# /Users/donovan.thomson/.rvm/gems/[email protected]/gems/devise-2.2.8/lib/devise/test_helpers.rb:46:in `sign_in' 
# ./spec/support/controller_macros.rb:17:in `block in login_specific_user' 

so ein Grundgerüst meines Controller sieht wie folgt aus:

class ProfilesController < ApplicationController 

    def index 
    render json: Profile.where(user_id: current_user.id) 
    end 
end 

ich nehme an, dies bedeutet, dass der Benutzer nicht angemeldet wird, wie ich erwarten würde

Meine spec ist als

require 'spec_helper' 

describe ProfilesController, type: :controller do 

    before do 
    @user = FactoryGirl.create :user 
    @profile = FactoryGirl.create :profile, user: @user 
    FactoryGirl.create :profile 
    end 

    describe "GET :index" do 

    login_specific_user(@user) 

    it "returns all profiles linked to the loged in user with the same country and client as the linked survey" do 
     get :index 
     expect(response.body).to eq(@profile.to_json) 
    end 
    end 

end 

Mein Controller Makros folgt lauten wie folgt:

module ControllerMacros 

    def login_admin 
    before :each do 
     sign_in ControllerMacros.get_user(@request, :admin, :admin_user) 
    end 
    end 

    def login_user 
    before :each do 
     sign_in ControllerMacros.get_user(@request, :user) 
    end 
    end 

    def login_specific_user(user) 
    before :each do 
     sign_in user 
    end 
    end 

    class << self 

    def get_user(req, mapping, type=mapping) 
     req.env["devise.mapping"] = Devise.mappings[mapping] 
     user = FactoryGirl.create(type) 
     user.confirm! 
     user 
    end 

    end 
end 

Antwort

0

Ich löste dies nicht Controller-Makros und das Hinzufügen von nur folgenden zu meinem vor Block

before do 
    @user = FactoryGirl.create :user 
    @user.confirm! 
    sign_in @user 
end 
Verwandte Themen