Disons que j'ai un composant angular 6 avec une méthode test
qui retourne une valeur:
import { doSomething } from './helper';
@Component({
...
})
export class AppComponent {
test() {
const data = doSomething(1);
return data.something ? 1: 2;
}
}
doSomething
n'est qu'une simple fonction d'aide:
export function doSomething() {
return { something: 1 };
}
Est-il possible de se moquer ou d'espionner cette fonction dans un test unitaire (afin que je puisse contrôler sa valeur de retour)? Ou dois-je changer mon approche dans le composant?
Veuillez noter: doSomething()
peut être une fonction lodash, une const, une classe etc. J'ai juste essayé de garder l'exemple aussi simple que possible.
Ce que j'ai essayé:
SpyOn
ne fonctionne pas car la fonction n'est attachée à rien
L'importation d'une fonction fictive dans le tableau imports
de TestBed.configureTestingModule
Donne Unexpected value 'doSomething' imported by the module 'DynamicTestModule'. Please add a @NgModule annotation.
Créer un service pour ça marche mais ça fait idiot de devoir créer des services pour chaque fonction importée
Dans votre fichier de spécifications, importez l'aide de cette façon:
import * as helper from './helper';
Et dans votre it (), vous pouvez espionner l'objet d'assistance et renvoyer la valeur demandée:
spyOn(helper, 'doSomething').and.returnValue({});