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