Jest: насмешливые зависимости, которые передаются в конструктор - PullRequest
0 голосов
/ 03 мая 2019

Я застрял, пытаясь смоделировать класс, который передается через конструктор, и все примеры, с которыми я сталкивался до сих пор, инициализировали зависимости внутри конструкторов. Насколько я понимаю, 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)

Это далеко не идеально, но подойдет для более простых случаев.

Заранее спасибо!

...