2010-09-02 7 views
7

Ich habe eine Reihe von Gurken-Szenarien, die mit Capybara auf einem Projekt laufen, an dem ich arbeite.Einloggen durch authlogic, ohne jedes Mal Formular ausfüllen zu müssen

Die meisten dieser Szenarien beginnen mit dem Schritt "Gegeben sei ich eingeloggt". Derzeit meine Implementierung dieser ist:

visit path_to('the login page') 
    fill_in('Username', :with => 'user') 
    fill_in('Password', :with => 'password') 
    click_button('Login') 

Dies funktioniert gut, aber es wird ein wenig Zeit immer mit raubend das Anmeldeformular vor jedem einzelnen Szenario zu laden und senden.

Gibt es eine Möglichkeit, einfach die Sitzung in diesem Schritt einzurichten, ohne jedes Mal das Formular durchlaufen zu müssen?

Antwort

0

können Sie Hintergrund in cucumber..ie

Background: 
    Given I am a logged-in admin user 

die Ihre Szenarien vertrocknen.

http://github.com/aslakhellesoy/cucumber/wiki/background

+1

Danke für die Antwort. Ich hatte das schon, das Problem lag in der Implementierung dieses Schritts - physisch musste ich jedes Mal das Formular ausfüllen und die Seite ausfüllen war langsam und ein wenig unnötig - ich muss das nur einmal testen. Am Ende lösten wir dies, indem wir die Benutzersitzung stubben. – AlistairH

2

Ein bisschen spät, um die Show wie gewohnt, aber das funktioniert für mich auf Rails 3.0.10.

In features/support/authlogic.rb:

require "authlogic/test_case" 
World(Authlogic::TestCase) 
ApplicationController.skip_before_filter :activate_authlogic 
Before do 
    activate_authlogic 
end 

Dann in features/step_definitions/user_sessions_steps.rb

Given /^I am already logged in$/ do 
    UserSession.create!(User.find_by_name!('user')) 
end 

Natürlich können Sie einen Benutzernamen in der Schrittdefinition übergeben, wenn Sie einen bestimmten Benutzer anmelden möchten.

Alle Details sind in diesem Blog-Eintrag: http://laserlemon.com/blog/2011/05/20/make-authlogic-and-cucumber-play-nice/

+0

Schrecklich. Sie sollten dazu die Benutzeroberfläche aufrufen, genauso wie Sie die Benutzeroberfläche für praktisch alles andere in den Integrationstests verwenden sollten - andernfalls testen Sie Ihre Anwendung nicht wirklich. Verwechseln Sie nicht die App-Interna in Ihren Integrationstests. –

+2

Wenn Sie Tausende von Gurken-Szenarien haben, fügen Sie eine Menge Overhead für wenig Nutzen hinzu. Sei pragmatisch. – PhilT

+0

Ich glaube nicht, dass es pragmatisch ist, wenn Ihre Integrationstests die Kapselung dessen, was sie testen sollen, verletzen. Das macht sie unsicher und nutzlos für ihren beabsichtigten Zweck. Es ist besser, überhaupt keine Tests zu schreiben als ungenaue zu schreiben. –

0

einen Trick aus einem anderen Auth gem Borrowing Sorcery ‚s wiki: Integration Testing with Rspec, Capybara and Fabricator, die sie verwenden:

page.driver.post(user_sessions_url, { username: user, password: password }) 

, die im Grunde die user_sessions_controller#create Methode aufruft, so machen sicher, dass die Argumente übereinstimmen. Also für mich, tat ich:

activate_authlogic 
page.driver.post(user_sessions_url, { user_session: { email: user.email, password: user.password } }) 

Ich suchte dies für ein paar Tage. und UserSession.create! konnte nicht für mich arbeiten. Obwohl dies eine alte Frage ist, bin ich auf Rails 4, hoffentlich kann es anderen helfen, ebenfalls festzustecken.