Ich habe 3 Tests, die jeweils verschiedene Methoden testen.
it('test function1', function() {
spyOn(document, 'getElementById');
//... some code to test function1
expect(document.getElementById).toHaveBeenCalled();
});
it('test function2', function() {
spyOn(document, 'getElementById');
//... some code to test function2
expect(document.getElementById).toHaveBeenCalled();
});
it('test function3', function() {
spyOn(document, 'getElementById');
//... some code to test function3
expect(document.getElementById).toHaveBeenCalled();
});
Aber wenn ich diese Tests durchführe, erhalte ich die folgende Fehlermeldung: getElementById has already been spied upon
. Kann jemand erklären, warum ich diesen Fehler erhalte, selbst wenn sich Spione in verschiedenen Testsuiten befinden, und wie man ihn behebt.
Lösung des Problems
Sobald Sie eine Methode einmal ausspioniert haben, können Sie sie nicht erneut ausspionieren. Wenn Sie nur überprüfen möchten, ob es in jedem Test angerufen wurde, erstellen Sie einfach den Spion zu Beginn des Tests und setzen Sie die Anrufe in zurück afterEach
:
spyOn(document, 'getElementById');
afterEach(() => {
document.getElementById.calls.reset();
});
it('test function1', function() {
//... some code to test function1
expect(document.getElementById).toHaveBeenCalled();
});
it('test function2', function() {
//... some code to test function2
expect(document.getElementById).toHaveBeenCalled();
});
it('test function3', function() {
//... some code to test function3
expect(document.getElementById).toHaveBeenCalled();
});
Keine Kommentare:
Kommentar veröffentlichen