Ich habe zwei Funktionen, die ich testen möchte; eine, die nur in "modernen Browsern" läuft, die andere, die nur in "älteren" Browsern läuft.
Ich benutze Jasmine als mein Test-Framework und Karma, um meine Tests durchzuführen. Karma wird viele Browser starten, in denen alle Tests ausgeführt werden.
Mein Problem ist, dass das Testen ALLER meiner Funktionen in ALLEN Browsern dazu führt, dass einige Tests fehlschlagen. Beispielsweise wird das Testen einer Funktion, die nur in modernen Browsern ausgeführt werden sollte, beim Testen in IE8 fehlschlagen.
Code zum Testen:
%Vor%Ursprünglicher Testcode:
%Vor%In diesen Testfällen schlägt ein Test in einem Browsertyp fehl, während der andere Test in einem anderen Browsertyp fehlschlägt.
Alternativer Testcode:
%Vor%Der alternative Testcode läuft in allen getesteten Browsern einwandfrei.
Fragen:
A - Ist es empfehlenswert, bedingte Anweisungen in Tests zu verwenden?
B - Wenn nicht, was wäre ein besserer Ansatz?
Es wird allgemein als schlechte Praxis angesehen, Bedingungen innerhalb des Testcodes zu haben. Außerhalb des Test-Codes ist etwas mehr akzeptabel und in Ermangelung eines eingebauten Mechanismus zur Auswahl von Test-Spezifikationen durch Browser, ist Ihre Lösung wahrscheinlich die einfachste. Sie verknüpfen jedoch Ihre Komponententests mit den browserspezifischen Implementierungen.
Ein "besserer" Ansatz wäre, Ihren browserspezifischen Code hinter einer einzigen Funktion zu verstecken und feature detection zu verwenden, um Mehrfachversand .
%Vor%Hier wird es unordentlich. Ihre zwei Funktionen haben unterschiedliche Rückgabewerte. Idealerweise möchten Sie den gleichen Rückgabewert für alle verwandten Funktionen, aber das ist nicht immer einfach. Zum Beispiel verwendet die Textbereichauswahl in IE8 völlig andere Objekte als die Textbereichauswahl in modernen Browsern. Manchmal können Sie die Details ausblenden (z. B. mithilfe des Strategie-Patterns ), manchmal nicht.
Wenn Sie es nicht sauber machen können, machen Sie es offensichtlich.
Tags und Links javascript testing jasmine