Я застрял, пытаясь смоделировать класс, который передается через конструктор, и все примеры, с которыми я сталкивался до сих пор, инициализировали зависимости внутри конструкторов.
Насколько я понимаю, jest заменяет такие зависимости своим переопределенным конструктором, но поскольку я сам передаю эти зависимости, мне нужен проходимый экземпляр при инициализации UnderTest
.
Для чего бы это ни стоило, я в идеале ищу поведение мокито, что-то вроде.
const mockedDependency = ???
const underTest = new UnderTest(mockedDependency)
...
Proceed to write tests for underTest
Это код, который я пытаюсь проверить. Пожалуйста, предположим, что MockedDependency
имеет свои собственные зависимости, переданные также конструктору.
export default class UnderTest {
private mockedDependency : MockedDependency
constructor(mockedDependency: MockedDependency) {
this.mockedDependency = mockedDependency
}
public methodUnderTest(parameter: string) {
const mockedResult = this.mockedDependency.returnSomething(parameter)
return this.doSomethingElse(mockedResult)
}
public methodUnderTest2(parameter1: string, parameter2: string) {
const mockedResult = this.mockedDependency.returnSomething2(parameter1, parameter2)
return this.doSomethingElse(mockedResult)
}
private doSomethingElse(mockedResult: string) {
return mockedResult
}
}
Как бы вы занялись модульным тестированием UnderTest
класса?
Бонусные баллы за способ установки результата mockedDependency
методов либо в каждом тесте, либо путем ввода.
Edit:
Возможное решение для тех, кто сталкивается с той же проблемой:
Можно привести переменную как нужный объект и переопределить методы следующим образом:
const mockedDependency = {
returnSomething(parameter: string) {
return parameter
}
} as MockedDependency
const underTest = new UnderTest(mockedDependency)
Это далеко не идеально, но подойдет для более простых случаев.
Заранее спасибо!