Значение Jest SpyOn вместо геттера - PullRequest
1 голос
/ 28 января 2020

У меня есть такая функция:

class MyClass

    constructor(private readonly simpleInstance: SomeOtherClass) {}

    get myGetter() {
        if(!simpleInstance) {
            throw Error('Bad thing')
        }
        return simpleIntance.id
    }

Я хочу написать тестовый пример, где simpleInstance = null

У меня много проблем с макетом simpleInstance

Вот мой тест и несколько опций, которые я попробовал.

Примечание: я использую NestJs, так что в моих тестах есть шаблон внедрения зависимостей, который я удалил для краткости. TL; DR : инициализированный SomeOtherClass передается в MyClass во время создания экземпляра.

describe('MyClass', () => {
    let myClassInstance: MyClass
    let someOtherClassMock: jest.Mock<SomeOtherClass>

    beforeEach(() => {
        someOtherClassMock = jest.fn()
        myClassInstance = new MyClass(someOtherClassMock)
    })

    it('should throw an error if injected simpleInstance is null', () => {
      userMock = ........ // <--- Setting up the mocked value is where I have trouble
      expect(() => myClassInstance.myGetter).toThrow(Error('Bad thing'))
    })
})

Я пытался вернуть ложные значения, шпионить за someOtherClassMock и возвращать значение, et c.

Как мне это сделать?

1 Ответ

1 голос
/ 28 января 2020

В этом случае макет не нужен. Вы можете просто явно создать свой экземпляр с null для его параметра SomeOtherClass в вашем it тестовом примере:

it('should throw an error if injected simpleInstance is null', () => {
  myClassInstance = new MyClass(null)
  expect(() => myClassInstance.myGetter).toThrow(Error('Bad thing'))
})
...