Я пытаюсь добавить модульное тестирование Jest в своем проекте Angular, node, Typescript.
В классах Angular я использую nginject
для внедрения зависимостей. Я пытаюсь проверить функциональность в этих классах и изо всех сил пытаюсь правильно максимизировать зависимости. Смотрите пример ниже.
export default class Foo{
Bar: Bar;
constructor(Bar: Bar){
'ngInject';
this.Bar = Bar;
}
CreateFooBar(str : string){
return this.Bar.SomeStringFunc() + str;
}
}
Я бы хотел проверить функцию Foo.CreateFooBar
. Но чтобы получить доступ к функции, мне нужно создать класс Foo
. Это требует Bar
в качестве зависимости.
Какой правильный способ высмеивать это в моем классе шутки. Я попытался создать мою макет, как это, и тип не подходит, поэтому Typescript жалуется.
import * as barClass from "../Bar.ts";
jest.mock("../Bar.ts");
const mockBar = barClass as jest.mocked<typeof barClass>;
const Bar = mockBar.default;
А потом пытаюсь построить мой тестовый объект, как.
let target: Foo = new Foo(barClass.mock.instances[0]);
Typescript выдает мне ошибку, говоря, что тип на самом деле type of Bar
, поэтому он не позволяет мне конструировать.
Я чувствую, что я близко, но не совсем. Как правильно смоделировать эту инъекцию для Jest? Обратите внимание, что это намного более простая абстракция того, что представляет собой код, и реальный класс имеет гораздо больше зависимостей.