Ich bin neu bei Jest und versuche damit zu testen, ob eine Funktion aufgerufen wurde oder nicht. Ich habe festgestellt, dass die mock.calls.length nicht für jeden Test zurückgesetzt wird, sondern sich ansammelt. Wie kann ich es vor jedem Test auf 0 setzen? Ich möchte nicht, dass meine nächsten Tests von den Ergebnissen der vorherigen abhängen.
Ich weiß, dass es vor jedem im Scherz gibt - sollte ich es benutzen? Was ist der beste Weg, um mock.calls.length zurückzusetzen? Vielen Dank.
Ein Codebeispiel:
Sum.js:
import local from 'api/local';
export default {
addNumbers(a, b) {
if (a + b <= 10) {
local.getData();
}
return a + b;
},
};
Sum.test.js
import sum from 'api/sum';
import local from 'api/local';
jest.mock('api/local');
// For current implementation, there is a difference
// if I put test 1 before test 2. I want it to be no difference
// test 1
test('should not to call local if sum is more than 10', () => {
expect(sum.addNumbers(5, 10)).toBe(15);
expect(local.getData.mock.calls.length).toBe(0);
});
// test 2
test('should call local if sum <= 10', () => {
expect(sum.addNumbers(1, 4)).toBe(5);
expect(local.getData.mock.calls.length).toBe(1);
});
javascript
unit-testing
jestjs
Alex Efremov
quelle
quelle
local.mockClear()
, funktioniert es nicht.jest.clearAllMocks()
? Docs: jestjs.io/docs/en/jest-object#jestclearallmocksjest.clearAllMocks()
Funktion! Ich habemockClear()
fürjest.mock
Klassen verwendet und anscheinend wurden die Mocks irgendwie nicht vollständig gelöscht (Spionagefunktionsaufrufe innerhalb von Scheinklassen wurden nicht gelöscht). Dies führte zu wirklich ärgerlichen Unterschieden zwischen Objektinstanzunterschieden :Compared values have no visual difference.
.Wie @AlexEfremov in den Kommentaren zeigte. Möglicherweise möchten Sie
clearAllMocks
nach jedem Test Folgendes verwenden:afterEach(() => { jest.clearAllMocks(); });
Denken Sie daran, dass dadurch die Anzahl der Anrufe für jede Mock-Funktion gelöscht wird, aber das ist wahrscheinlich der richtige Weg.
quelle
Sie können Jest so konfigurieren, dass Mocks nach jedem Test zurückgesetzt werden, indem Sie dies in Folgendes einfügen
jest.config.js
:module.exports = { resetMocks: true, };
Hier ist die Dokumentation für diesen Konfigurationsparameter: https://jestjs.io/docs/en/configuration#resetmocks-boolean
quelle