J'ai une fonction que j'aimerais tester qui appelle deux fois une méthode d'API externe, en utilisant différents paramètres. Je voudrais moquer cette API externe avec un espion Jasmine et renvoyer différentes choses en fonction des paramètres. Y a-t-il un moyen de faire cela dans Jasmine? Le mieux que je puisse trouver est un hack utilisant andCallFake:
var functionToTest = function() {
var userName = externalApi.get('abc');
var userId = externalApi.get('123');
};
describe('my fn', function() {
it('gets user name and ID', function() {
spyOn(externalApi, 'get').andCallFake(function(myParam) {
if (myParam == 'abc') {
return 'Jane';
} else if (myParam == '123') {
return 98765;
}
});
});
});
and.callFake
- jasmine.github.io/2.2 / ... >spyOn(fake, 'method').withArgs('abc').and.returnValue('Jane')
etspyOn(fake, 'method').withArgs('123').and.returnValue(98765)
..withArgs
ne fonctionne pas pour moi dans Jasmine 2.0.withArgs
n'est pas vraiment disponible - je voulais dire qu'une telle méthode aurait du sens lors de l'écriture de tests.Vous pouvez également utiliser
$provide
pour créer un espion. Et simulez l'utilisationand.returnValues
au lieu deand.returnValue
passer des données paramétrées.la source
returnValues
pour prendre en charge plusieurs appelsexternalApi.get.and.returnValues('abc','123')
est appelé dans lait
fonction. Sinon, si vous définissez une liste de valeurs, ailleurs, cela ne fonctionnera jamais car l'ordre dans lequel les tests sont exécutés n'est pas prévisible. En fait, les tests ne devraient pas dépendre de l'ordre dans lequel ils sont exécutés.Dans mon cas, j'avais un composant que je testais et, dans son constructeur, il y a un service de configuration avec une méthode appelée getAppConfigValue qui est appelée deux fois, à chaque fois avec des arguments différents:
Dans mes spécifications, j'ai fourni le ConfigService dans le TestBed comme suit:
Ainsi, tant que la signature de getAppConfigValue est la même que celle spécifiée dans le ConfigService réel, ce que la fonction fait en interne peut être modifié.
la source