javascript - Jest SpyOn 值而不是 getter

标签 javascript node.js typescript jestjs nestjs

我有一个这样的函数:

class MyClass

    constructor(private readonly simpleInstance: SomeOtherClass) {}

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

我想编写一个测试用例,其中simpleInstance = null

我在模拟 simpleInstance 时遇到了很多麻烦

这是我迄今为止的测试,以及我尝试过的一些选项。

Note: I am using NestJs so there is a dependency injection pattern within my tests which I have removed for brevity. TL;DR: an initialized SomeOtherClass gets passed into MyClass during instantiation.

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

我该怎么做?

最佳答案

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

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

关于javascript - Jest SpyOn 值而不是 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59940459/

相关文章:

node.js - 用于 node.js 中聊天服务器的 Redis pub/sub

javascript - 如何在 Angular2 中使用 Dojo?

javascript - TypeScript es6-promise,我如何匹配 Promise 构造函数

javascript - Chrome 扩展如何访问脚本中的全局变量集

javascript - 带日期 slider 的 D3 折线图

html - 从静态 html 页面访问 Express.js 请求或 session

javascript - 在 typescript 中向 javascript 对象添加属性没有错误

javascript - 当链接没有被显示 block 隐藏时,如何防止链接成为制表位?

javascript - 如何覆盖(overwrite)material-ui(React)中的类和样式

javascript - Node.js:找不到模块 'chai'