Ich habe so abgekocht und sonst niemand Ergebnisse der scheint für mich zu arbeiten:Devise Rspec nicht definierte Methode `env‘ für nil: NilClass
Ich habe ein ControllerHelper
Methode für meine Spec basiert vor, was für Devise vorgeschlagen wurde:
def login_existing_user
@request.env["devise.mapping"] = Devise.mappings[:user]
user = FactoryGirl.create(:user)
company = FactoryGirl.create(:company)
user.company_id = company.id
sign_in user
end
ich bin auch ein Company
in diesem Verfahren zu schaffen, da das ist Schritt 2 des Anmeldevorganges für einen Benutzer in der Lage sein, meine authentifizierten Homepage.
An diesem Punkt versuche ich gerade mit meinem den Benutzer anmelden ScansControllerSpec
:
RSpec.describe ScansController, type: :controller do
before(:all) do
login_existing_user
@device = build(:device)
end
describe "GET #create" do
it "returns http success" do
get :create, :device_id => @device.id
puts response
# expect(response).to have_http_status(:success)
end
end
....
end
Aber ich diese Methode RSpecs für jede meiner CRUD bekommen:
1) ScansController GET #create returns http success
Failure/Error: @request.env["devise.mapping"] = Devise.mappings[:user]
NoMethodError:
undefined method `env' for nil:NilClass
# ./spec/support/controller_helpers.rb:15:in `login_existing_user'
# ./spec/controllers/scans_controller_spec.rb:6:in `block (2 levels) in <top (required)>'
Wie andere Beiträge vorgeschlagen haben, schließe ich die Devise::TestHelpers
in meine rails_helper.rb
Datei ein. Ich habe auch meine eingeschlossen ControllerHelpers
:
RSpec.configure do |config|
config.include Devise::TestHelpers, type: :controller
config.include Warden::Test::Helpers
Warden.test_mode!
config.infer_spec_type_from_file_location!
config.include ControllerHelpers, type: :controller
config.after do
Warden.test_reset!
end
end
Am Ende, ich brauche einen Benutzer bei Test anmelden zu können, die Controller-Methoden arbeiten geschützt. Ich bin nicht sicher, ob dies ein Assoziationsproblem ist, also werde ich hinzufügen, dass ein Benutzer eine company
haben muss, und eine Firma muss eine subscription
haben, um sich erfolgreich einzuloggen.
... aber ich kann nicht einmal so weit kommen, da dieser Fehler mich zurückhält.
Controller Tests laufen nicht durch eine tatsächliche Anfrage, wenn Sie Zugriff auf das 'request' Objekt wollen (kein' @ '), dann definiert man machen diese Anforderungsspezifikationen. – Anthony
@Anthony Entschuldigung, ich bin noch nicht so gut beim Testen. Also, wie gehe ich vor, um alle meine geschützten Controller-Methoden zu testen? Ich habe Devise 'before_action: authenticate_user!' In meinem 'application_controller.rb', was zu der Annahme führte, dass ich einen angemeldeten Benutzer nachahmen musste. – Godzilla74
Wenn ich 'login_existing_user' aus meinen Tests heraushole, werde ich auf meine Anmeldeseite weitergeleitet. – Godzilla74