2016-07-05 5 views
5

Auf der Jasmine website sehe ich, dass wir Suites durch xdescribe oder einzelne Spezifikationen von xit deaktivieren können. Gibt es eine Möglichkeit, nur eine Erwartung zu deaktivieren (wie xexpect)?Disable Jasmine Erwartung, wie Xdescribe oder Xit?

Der Grund, warum ich das frage ist, weil ich E2e Tests mit Winkelmesser schreibe und in unserer kontinuierlichen Integration haben wir noch (wenn überhaupt) keinen Zugriff auf die Datenbank, obwohl wir lokal ein echtes Ende haben können Ende Tests mit Zugriff auf die Datenbank, zum Beispiel.

Ich möchte einzelne Erwartungen als optional markieren, abhängig von einer Konfiguration oder Umgebungsvariable. Es wäre schön, einmal einen Switch zu erstellen und dann einen Wrapper um expect zu erstellen, der nur fehlschlägt, wenn wir die Tests lokal ausführen (mit Zugriff auf die Datenbank).

So zum Beispiel kann ich eine neue Spezifikation Familie erstellen:

if (process.env.DB_AVAILABLE) { 
    dbit = it; 
} else { 
    dbit = xit; 
} 

und schreiben Spezifikationen, die wie folgt auf die Datenbankverbindung abhängig:

dbit('creates new user', function() {}); 

Gibt es eine Möglichkeit, das gleiche mit expect zu tun (zB dbexpect)?

Wenn etwas grundsätzlich falsch mit meinem Ansatz ist, halten Sie es nicht zurück und lassen Sie es mich wissen.

+0

Nicht sicher an die 'expect' Anweisung vorangestellt wird - aber du könntest 'browser.getProcessedConfig()' verwenden und die 'selenAddress' überprüfen und bedingte' expect's machen (vorausgesetzt, du hast 2 configs, eine für local und eine für den CI-Server). 'if (local) {expect (wahr) .toBe (wahr)} else {expect (false) .toBe (false)} ... aber das könnte teuer werden, wenn Sie es an vielen Orten tun. – Gunderson

+0

Ich habe auch nie daran gedacht, das 'It' in eine Variable umzuwandeln, die auf der Umgebung basiert ... danke dafür :) – Gunderson

+0

Danke. Ja, ich habe darüber nachgedacht, aber ich suchte nach einer sauberen Lösung. –

Antwort

1

Sie könnten Ihre eigenen xexpect durch die Implementierung aller Methoden/Eigenschaften mit einer leeren Funktion erstellen:

var xexpect = function() { 
    return xexpect; 
}; 

Object.getOwnPropertyNames(jasmine.Expectation.prototype).forEach(function(name){ 
    xexpect[name] = xexpect; 
}); 

Object.defineProperty(xexpect, 'not', {get: xexpect}); 

Verbrauch:

xexpect(1).toBeGreaterThan(2); 

xexpect(true).not.toEqual(true);