Ich benutze jasmine 2.0.Jasmine 2.0 getan und afterEach
Ich versuche, die done()
Funktion zu verstehen.
Mit dem folgenden grundlegenden Jasmin Code:
describe('Jasmine 2.0 done()', function() {
beforeEach(function() {
console.log('install');
jasmine.clock().install();
});
afterEach(function() {
console.log('uninstall');
jasmine.clock().uninstall();
});
it('should wait 1ms then complete', function (done) {
setTimeout(function(){
console.log('async');
expect(true).toBe(true);
done();
}, 1)
});
});
Was ich glaube, ich sehe passieren:
beforeEach
läuft, die Uhr zu installieren, meldet "install"- Die Testläufe, die setTimeout nicht alles tun
- Der Test wartet 5 Sekunden (das Standard-Timeout ja smine hat vorher versagt)
- Der Test schlägt fehl, weil
done()
nie aufgerufen wird. - Ich weiß das, weil ich den Fehler:
Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
afterEach
dann sowieso läuft, deinstalliert die Uhr und Protokolle "uninstall"
Ich würde erwarten dass
beforeEach
läuft, Installation der Uhr und Protokolle "installieren"- Der Test läuft, wartet eine Millisekunde, führt das Protokoll, die expec t und
done()
afterEach
verläuft, deinstalliert die Uhr und Protokolle "uninstall"- Der Test geht ohne Fehler
ich das denke, weil die Dokumentation sagt
And this spec will not complete until its done is called.
So nahm ich afterEach
würde warten bis done()
aufgerufen wird um auszuführen.
ich versucht habe, das Hinzufügen done()
im afterEach
zu
afterEach(function (done) {
console.log('uninstall');
jasmine.clock().uninstall();
done();
});
Das machte keinen Unterschied.
Warum ist dieser Test nicht erfolgreich?
Was verstehe ich nicht über die done()
Funktion?
plunker das Problem
Ah, interessant. Ich muss das verpasst haben. Vielen Dank. Hat die Uhr auch andere Auswirkungen auf asynchrone Aktionen? Ie.e Versprechungen (Wo kommt dieses ursprüngliche Problem her) –
Basierend auf Jasmine Dokumentation betrifft die Installation von Mock Clock nur 'setInterval' und 'setTimeout' Funktionen und sollte keine anderen nativen Objekte beeinflussen. Es sollte keine nativen Versprechungen beeinflussen, aber es könnte kundenspezifische Implementierungen und Polyfills oder irgendeinen anderen Code, der 'setTimeout' und' setInterval' verwendet, durcheinander bringen. – Stubb0rn
Ich verstehe. Danke für deine Antwort. Ich werde das verwenden, um zu versuchen, meinen Test mit Versprechungen zu reparieren und Sie wissen zu lassen, ob es einen Effekt zu haben scheint. –