Ich bin an dem Punkt angelangt, an dem ich einen Admin-Dashboard-Teil meiner App entwickle, und für jede Aktion muss der Benutzer angemeldet sein.
So zum Beispiel dieser Test:
describe 'GET #index' do
let(:user) { create(:user) }
before do
sign_in user
end
it 'responds successfully with an HTTP 200 status code' do
get :index
expect(response).to be_success
expect(response).to have_http_status(200)
end
it 'renders the index template' do
get :index
expect(response).to render_template('index')
end
it 'loads all of the tags into @tags' do
tag1 = create(:tag)
tag2 = create(:tag)
get :index
expect(assigns(:tags)).to match_array([tag1, tag2])
end
end
Funktioniert einwandfrei, aber ich habe mir überlegt, ob ich den Teil Benutzererstellung und Anmeldung zu etwas extrahieren könnte, das ich für all diese Admin-Tests verwenden kann. Ich habe es versucht:
describe 'GET #index', admin: true do
....all the same as above, except user creation and before sign in block
end
Dann habe ich in meinem spec/spec_helper.rb
Folgendes hinzugefügt:
config.before(:each, admin: true) do |_example|
before do
sign_in FactoryGirl.create(:user)
end
end
Leider hat das nicht funktioniert. Gibt es eine bessere Möglichkeit, dies zu tun? Erreichen Sie das Gleiche, dass ich den Anmeldecode an einer Stelle ablegen kann und ihn in meinen Administratortests nicht erneut einfügen muss.
Ich benutze Rails 4 und Rspec 3.
2 Antworten
Sie haben eine zusätzliche vor Block. entferne es so ...
config.before(:each, admin: true) do |_example|
before do
sign_in FactoryGirl.create(:user)
end
end
Wird dies ...
config.before(:each, admin: true) do
sign_in FactoryGirl.create(:user)
end
Auch wenn dies Controller-Spezifikationen sind (wie sie scheinen), dann ist dies ...
describe 'GET #index' do
Sollte eigentlich so aussehen ...
describe SomeController, type: :controller, admin: true do
Gemeinsame Beispiele sind eine gute Möglichkeit, Ihre Spezifikationen zu bereinigen und Codeduplikationen zu entfernen. Schauen Sie sich https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples
Neue Fragen
ruby-on-rails
Ruby on Rails ist ein Open Source-Webanwendungsframework mit vollem Stapel, das in Ruby geschrieben wurde. Es folgt dem beliebten MVC-Framework-Modell und ist bekannt für seinen "Convention over Configuration" -Ansatz für die Anwendungsentwicklung.