在依赖于 instanceof (JEST) 的函数中测试实例

Testing instances in a function that depends on instanceof (JEST)

我 运行 在编写单元测试以测试具有实例检查的函数时遇到了问题。业务逻辑:

let status = new B();
const testFunction = () => {
    if (status instanceof A) {
      console.log('inside A')
    } else if (status instanceof B) {
      console.log('inside B')
    } else {
      console.log('No matchers')
    }

}

单元测试:

describe('test', ()=>{
  
  it("should test b", ()=>{
    let status = new A()
    expect(status).toBeInstanceOf(A) // passes
    expect(logSpy).toHaveBeenCalledWith('inside A') // fails and it expects 'inside B'
  })
})

我觉得测试失败的一个原因是因为在原始文件中,status 是 return class B 的一个实例,所以它匹配 else if 和不是 if。我不确定如何在不更改的情况下测试此代码 status?有没有我错过的方法?

编辑:此处假设 testFunction() 已在单元测试中调用

您可以将状态作为函数的参数传递;

const testFunction = (status) => {
  if (status instanceof A) {
    console.log('inside A')
  } else if (status instanceof B) {
    console.log('inside B')
  } else {
    console.log('No matchers')
  }
}

然后应调用 testFunction() 并显示您需要测试的状态;

const status = new A();
testFunction(status);

你的测试的问题是你正在测试的函数有自己的作用域,另一个解决方案是模拟变量,但可能最容易混淆