2 votes

Mocking d'une méthode qui est appelée en utilisant une fonction flèche comme paramètre.

Comment puis-je utiliser le package Sinon pour stub/mocker un appel de méthode où l'un des paramètres que je dois mocker est appelé à l'aide d'une fonction flèche ? eg

let objWithMethod = { method : function(x) {}; };
function SUT() {
    // use case
   let x = 'some value';
   let y = { anotherMethod : function(func) {}; };

   // I want to test that `y.anotherMethod()` is called with
   // `(x) => objWithMethod.method(x)` as the argument
   y.anotherMethod((x) => objWithMethod.method(x));
}

let mockObj = sinon.mock(objWithMethod);

// Both of these fail with a "never called" error
mockObj.expects('method').once().withArgs(objWithMethod.method.bind(this, x));
mockObj.expects('method').once().withArgs((x) => objWithMethod.method(x));

SUT();
mockObj.verify();

Je n'ai rien trouvé dans la documentation sinon ni après quelques tentatives de recherche sur Google.

0voto

estus Points 5252

Les correspondances approximatives que vous essayez de faire peuvent être faites avec matchers pour comparer avec n'importe quelle fonction, il devrait être

mockObj.expects('method').withArgs(sinon.match.func)

Et il échouera, parce que objWithMethod.method n'est pas appelé du tout.

Ce site

// Je veux tester que y.anotherMethod() est appelé avec

// (x) => objWithMethod.method(x) comme argument

ne peut pas être fait, parce que le code n'a pas été écrit avec des tests à l'esprit. JS ne peut pas refléter les variables locales, et SUT est une boîte noire.

Afin d'être accessible aux tests et d'obtenir une couverture à 100 %, chaque variable et chaque fermeture doit être exposée au monde extérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X