web-dev-qa-db-fra.com

stubbing une fonction en utilisant plaisanterie

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]);
18
Mattan Bitner

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

26
Ilya Zub

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().

3
Pete Hodgson