2017-08-20 3 views
-1

Ich habe eine Flask-Anwendung, in der einige Seiteninhalte von einer globalen Variable kommen. Ich versuche, einige Unit-Tests einzurichten, um die Daten geltend machen, aber ich kann nicht einmal eine lokale Variable zur Arbeit zu kommen scheinen:Wie man variablen Inhalt im Komponententest behauptet (Flask, Python3, Nose2)

TEST_STRING = foo 

self.assertIn(b['TEST_STRING'], response.data) 

nicht mit:

NameError: name 'b' is not defined 

Wenn ich Referenz die einfache Variable:

self.assertIn(TEST_STRING, response.data) 

ich den erwarteten Ausfall:

TypeError: a bytes-like object is required, not 'str' 

Der Test ist erfolgreich, wenn ich die variablen Daten in den Test festcode, aber ich würde den Test lieber nicht aktualisieren müssen, wenn sich die Variable ändert. Was fehlt mir hier?

+0

_Was fehlt mir hier? _ Für den Anfang fehlt Ihnen der Teil, wo Sie uns den Code zeigen, wo 'b' definiert ist. –

+0

@JohnGordon das 'b' ist genau dort in meinem ersten Codeblock, das erste Zeichen nach den öffnenden Klammern. Es ist nicht anderswo definiert, da es ein [String-Literal] ist (https://docs.python.org/3.3/reference/lexical_analysis.html#string-and-bytes-literals). Ich glaube, Ihre Abstimmungen waren falsch. – mrrg

+0

Hier ist b _referenced_, aber Sie haben uns nie gezeigt, wo b _defined_, d. H. 'B = ' und/oder 'global b' ist. (Und ich habe nicht runtergestimmt; ich habe nur kommentiert.) –

Antwort

0

Das Problem wurde mit dem bytes literal prefixb:

Bytes Literale werden immer mit 'B' vorangestellt oder 'B'; Sie erzeugen eine Instanz des Typs "Bytes" anstelle des Typs "str". Sie dürfen nur ASCII-Zeichen enthalten. Bytes mit einem numerischen Wert von 128 oder größer müssen mit Escapezeichen ausgedrückt werden.

Während es wie Bytesprefix = Bytes Typ klingt, scheint dies nicht zu funktionieren, wenn die Daten von einer Variablen stammen.

Die Lösung war das b Präfix zu dem bytes functionbytes, in dem es heißt zu ändern: auch mit Literalen erstellt werden können

Bytes Objekte, String und Bytes Literale sehen.

So, während sie austauschbar erscheinen, ist dies nicht immer der Fall!

Für meinen Anwendungsfall musste ich auch meinen Codierungstyp für die bytes-Funktion angeben.

Hier ist die Arbeits Syntax zu meiner ursprünglichen Post Beispiel:

self.assertIn(bytes(TEST_STRING, "utf-8"), response.data) 

Dank geht an John Gordon, den bytes in den Kommentaren Schalen vorgeschlagen, aber nie offiziell beantwortet. Also, nach ein paar Tagen werde ich weitermachen und es jetzt schließen.

Verwandte Themen