我有这样的功能:
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'))
})