2016-08-25 1 views
0

Ich bin ein Flask-Tutorial und derzeit auf behavior Driven Development mit Behave.Behavior Driven Development - Undefinierte Schritte in Behave mit Python mit Flask

Meine Aufgabe ist es, eine sehr einfache Bloganwendung zu erstellen, die es einem einzelnen Benutzer ermöglicht, sich mit BDD anzumelden, abzumelden und Blogposts zu erstellen.

Ich habe die Feature-Datei, die Schrittdatei und die Umgebungsdatei geschrieben. Ich habe dann Code geschrieben, um es einem Benutzer zu ermöglichen, sich an- und abzumelden.

Wenn ich die Anwendung lokal und manuell testen, funktioniert es wie erwartet, dass der Benutzer sich an- und abmeldet und den erforderlichen Text anzeigt ("Sie waren eingeloggt" oder "Sie wurden ausgeloggt"), also ' Ich nehme an, dass das Problem mit der Feature-Datei oder der Steps-Datei und nicht mit dem Anwendungscode besteht.

Wenn ich Behave ausführen, scheint der letzte Schritt "undefiniert" zu sein.

Der relevante Teil der Feature-Datei ist:

Feature: flaskr is secure in that users must log in and log out to access certain features 

Scenario: successful login 
    Given flaskr is setup 
    When we log in with "admin" and "admin" 
    Then we should see the alert "You were logged in" 

Scenario: successful logout 
    Given flaskr is setup 
    and we log in with "admin" and "admin" 
     When we log out 
     Then we should see the alert "You were logged out" 

Und meine Schritte Datei ist:

from behave import * 

@given(u'flaskr is setup') 
def flask_is_setup(context): 
    assert context.client 

@given(u'we log in with "{username}" and "{password}"') 
@when(u'we log in with "{username}" and "{password}"') 
def login(context, username, password): 
    context.page = context.client.post('/login', 
             data=dict(username=username, 
              password=password), 
             follow_redirects=True 
            ) 
    assert context.page 

@when(u'we log out') 
def logout(context): 
    context.page = context.client.get('/logout', follow_redirects=True) 
    assert context.page 

@then(u'we should see the alert "{message.encode("utf-8")}"') 
def message(context, message): 
    assert message in context.page.data 

aus der Umwelt-Datei:

def before_feature(context, feature): 
    context.client = app.test_client() 

Es ist die letzte " dann "Schritt, der scheint das Problem zu sein. Ich habe versucht, die Tutorial-Lösungen zu überprüfen und woanders zu suchen, aber ich kann nicht scheinen, diesen Teil des Codes zu lösen. Ich musste die Nachricht verschlüsseln, da ich Python Version 3.5 verwende (das Tutorial verwendete Version 2.7, wenn dies relevant ist).

Alle Zeiger würden sehr geschätzt werden.

+0

Haben Sie versucht, die Codierung innerhalb der Methode zu verschieben ?, möglicherweise die Regex passt nicht deshalb. – lauda

+0

Danke, das hat mein Problem gelöst. Zumindest denke ich, dass das das ist, was du meintest - ich habe den encode so verschoben, dass ich jetzt "message.encode" ("utf-8") in context.page.data "aktiviere und es jetzt funktioniert. – James

+0

Ja :), das ist was ich meinte. – lauda

Antwort

0

Das Verschieben des Encoders löste das Problem. Ich habe jetzt

@then(u'we should see the alert "{message}"') 
def message(context, message): 
    assert message.encode("utf-8") in context.page.data 
Verwandte Themen