Как смоделировать / шпионить импортированную функцию в модульном тестировании Angular - PullRequest
0 голосов
/ 30 мая 2018

Допустим, у меня есть угловой компонент 6 с методом test, который возвращает некоторое значение:

import { doSomething } from './helper';

@Component({
    ...
})
export class AppComponent {
    test() {
        const data = doSomething(1);
        return data.something ? 1: 2;
    }
}

doSomething - это просто простая вспомогательная функция:

export function doSomething() {
    return { something: 1 };
}

Можно ли смоделировать или шпионить за этой функцией в модульном тесте (чтобы я мог контролировать ее returnValue)?Или мне нужно изменить свой подход в компоненте?

Обратите внимание: doSomething() может быть функцией lodash, const, классом и т. Д. Я просто старался сделать пример как можно более простым.


То, что я пробовал:

  • SpyOn не работает, потому что функция не привязана ни к чему

  • Импорт фиктивной функции в массив imports с TestBed.configureTestingModule дает Unexpected value 'doSomething' imported by the module 'DynamicTestModule'. Please add a @NgModule annotation.

  • Создание службы для нее работает, но глупо создавать службы для каждой из них.импортированная функция

1 Ответ

0 голосов
/ 01 июня 2018

В вашем файле спецификации импортируйте помощника следующим образом:

import * as helper from './helper';

И в вашем it () вы можете следить за объектом помощника и возвращать запрошенное значение:

spyOn(helper, 'doSomething').and.returnValue({});
...