web-dev-qa-db-fra.com

Comment se moquer / espionner une fonction importée dans Angular test unitaire

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

10
user7995820

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({});
11
MDI