我有这样的功能:

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并返回值,等等。

我该怎么做呢?

最佳答案

在这种情况下,不需要模拟。您可以在null测试用例中使用SomeOtherClass为其参数it显式创建实例:

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

09-30 13:31