Мокинг службы TypeDI с помощью Jest - PullRequest
0 голосов
/ 07 мая 2020

Я использую Node с TypeScript, TypeDI и Jest. Я создаю службы, которые зависят друг от друга, скажем:

@Service()
export class MainService{
constructor(private secondService: SecondService){}
public someMethod(someString: string) // implementation depends on secondService
}

@Service()
export class SecondService{
constructor(private thirdService: ThirdService){}
}

@Service()
export class ThirdService{
constructor(){}
}

Я хочу протестировать MainService, но для его создания мне нужно передать зависимость, а этой зависимости нужна другая зависимость. Я пытался сделать это так, это работает, но некрасиво:

const secondService = new SecondService(new ThirdService());
jest
    .spyOn(secondService, "someMethod")
    .mockImplementation((someString: string) => {
        // do something
        return something;
    });
const mainService = new MainService(secondService);
// use mainService in tests

Конечно, создание нового экземпляра зависимости не всегда вариант, и определенно не вариант, когда у него много зависимостей.

Я думаю, это должно больше выглядеть:

const secondService = SomeMockFactory.create(SecondService);

, но я не могу найти способ создать макет при отключении зависимостей. Я пробовал использовать

const secondService = jest.genMockFromModule("path/to/second/service");

, но после попытки spyOn методов secondService TS выдает ошибку, что «someMethod» не является функцией. Что я упускаю / делаю не так? Нужна ли мне какая-нибудь другая библиотека, кроме Jest?

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