J'ai une action Redux, qui elle-même distribue deux autres actions. Chaque action est extraite d'une fonction importée. Un d'un module local, l'autre d'une bibliothèque externe.Impossible de remplacer une fonction à l'aide de Sinon
import { functionA } from './moduleA';
import { functionB } from 'libraryB';
export function myAction() {
return (dispatch) => {
dispatch(functionA());
...
dispatch(functionB());
}
}
Dans mes tests, je suis en utilisant un bac à sable sinon
pour bouchonner les fonctions mais seulement deux des tests passent. Je m'attends à ce que tous les 3 passent.
import * as A from './moduleA';
import * as B from 'libraryB';
describe(__filename, async() => {
it('Calls 2 other actions',() => {
sandbox = sinon.sandbox.create();
const dispatch = sandbox.stub();
sandbox.stub(A, 'functionA');
sandbox.stub(B, 'functionB');
await myAction()(dispatch);
// passes
expect(dispatch.callCount).to.equal(2);
//passes
expect(A.functionA).to.have.been.called();
// fails
expect(B.functionB).to.have.been.called();
});
});
La dernière attendre échoue avec l'erreur:
TypeError: [Function: functionB] is not a spy or a call to a spy!
Quand je sortie les fonctions de la console je reçois ce qui semble être lié à la façon dont Babel importe une exportation exportée (ES6 re-exported values are wrapped into Getter). Les fonctions fonctionnent en direct, mais pas dans le test.
{ functionA: [Function: functionA] }
{ functionB: [Getter] }
J'ai essayé d'utiliser stub.get(getterFn)
mais me donne l'erreur:
TypeError: Cannot redefine property: fetchTopicAnnotations
Merci pour votre réponse, mais nommer les talons n'a aucun effet –