2017-07-05 5 views
0

Meine Anwendung leitet eine externe Partei für Single-Sign-On (SSO) um.Mocking eine externe SSO-Anmeldung in RSpec Feature-Spezifikationen mit Capybara Webkit

Sobald diese externe Partei angemeldet ist, leitet sie diesen Benutzer zurück zur Rückrufroute meiner App.

Diese umgesetzt wird, wie in der Steuerung folgt:

SsoController < ApplicationController 

    def connect 
    # do stuff 

    # Redirect to external party with some params 
    redirect_to "www.external-party.com?foo=\"bar\"" 
    end 

    def callback 
    # Receive response from external party 
    response = params[:response] 

    # do stuff 
    end 
end 

In meiner Funktion specs würde ich gerne, tatsächlich haben diese so verspottet aus kann ich die End-to-End-Test-Funktionalität aus der Sicht des Benutzers.

Ich verwende RSpec + Capybara und ich würde die folgende Strömung tun modellieren -

  • Der Benutzer klickt auf eine Schaltfläche (zB „Anmelden“)
  • Die Schaltfläche zum connect gebunden Aktion, über die Umleitungen an eine externe Partei
  • RSpec eine Antwort verspottet, basierend auf dem params über und sendet eine POST Anfrage zurück zu meiner app (callback Aktion)
  • Weitere Business-Logik melden sie sich an Benutzern und nehmen sie geschickt th EIR Ziel

Ich bin nicht sicher, wie der 3. Schritt zu tun, vor allem mit dem Anruf abzufangen, den Aufbau die Antwort, und POST-ing etwas zurück

Dank!

Bearbeiten: Eine POST Anfrage zurück zu meiner App ist bevorzugt, aber ist kein Muss. Wenn es sich um eine GET Anfrage oder eine Weiterleitung handelt, kann ich meine App so konfigurieren, dass diese HTTP-Verben nur in der Testumgebung zugelassen werden.

Antwort

1

Anstatt zu versuchen, dies im App-Code zu verspotten (was in Feature-Spezifikationen nicht empfohlen wird), ist die Verwendung eines programmierbaren Proxy wie puffing billy - https://github.com/oesmith/puffing-billy der sauberste Weg. Dadurch können Sie dem Testbrowser antworten, indem Sie eine Anfrage an "www.external-party.com?foo = \" bar \ "" auf jede gewünschte Art und Weise stellen.

+0

Danke! Das scheint sehr nützlich zu sein. – user2490003

Verwandte Themen