existe-t-il un moyen de stub une fonction en utilisant jest API? J'ai l'habitude de travailler avec sinon stub, où je peux écrire des tests unitaires avec des stubs pour tout appel de fonction sortant de mon unité testée http://sinonjs.org/releases/v1.17.7/stubs/
par exemple-
sinon.stub(jQuery, "ajax").yieldsTo("success", [1, 2, 3]);
Avec jest
, vous devez utiliser jest.spyOn
:
jest
.spyOn(jQuery, "ajax")
.mockImplementation(({ success }) => success([ 1, 2, 3 ]));
Exemple complet:
const spy = jest.fn();
const payload = [1, 2, 3];
jest
.spyOn(jQuery, "ajax")
.mockImplementation(({ success }) => success(payload));
jQuery.ajax({
url: "https://example.api",
success: data => spy(data)
});
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledWith(payload);
Vous pouvez essayer l'exemple en direct sur codesandbox
: https://codesandbox.io/s/018x609krw?expanddevtools=1&module=%2Findex.test.js&view=editor
Jest fournit jest.fn (), qui a quelques fonctionnalités basiques de moquerie et de stubbing.
Si vous êtes expérimenté et à l'aise avec Sinon, vous pouvez toujours créer des tests basés sur Jest qui utilisent sinon Test Double. Cependant, vous perdrez la commodité des comparateurs Jest intégrés tels que expect(myStubFunction).toHaveBeenCalled()
.