Ложные классы NgInject с Jest - PullRequest
       4

Ложные классы NgInject с Jest

0 голосов
/ 17 января 2019

Я пытаюсь добавить модульное тестирование 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? Обратите внимание, что это намного более простая абстракция того, что представляет собой код, и реальный класс имеет гораздо больше зависимостей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...