繁体   English   中英

开玩笑不是 mocking 功能正常

[英]Jest not mocking functions properly

所以我有一个名为 A 的模块,它有两个功能:

function handleCreatedOrder(){
  console.log("here")
}

function acquireOrder(){
  if(condition) handleCreatedOrder
}

我有一个测试需要检查是否调用了 handleCreatedOrder。 我通过首先import * as acquireOrderWrapper from './module'模块

然后在测试中我通过let handleCreatedOrderSpy = jest.spyOn(acquireOrderWrapper, "handleCreatedOrder")监视模块

当我尝试断言expect(handleCreatedOrder).toBeCalled()它失败,因为收到的呼叫数量不匹配。 我理解这是因为 mocking 不正确,因为调用了来自handleCreatedOrder的 console.log 但期望语句失败。 我究竟做错了什么?

我的测试目前像

describe("handle acquireOrder success responses", () => {
  const reactRedux = { useDispatch, useSelector }
  const useDispatchMock = jest.spyOn(reactRedux, "useDispatch")

  test("test1", async () => {
    let handleCreatedOrderSpy = jest.spyOn(acquireOrderWrapper, "handleCreatedOrder")
    await acquireOrder()
    expect(handleCreatedOrderSpy).toBeCalled()
  }

我认为您需要做的是首先在 handleCreatedOrder function 上创建一个间谍,然后在您的测试中调用 acquireOrder function。

一旦你执行了acquireOrder function,spy就会被调用,你的测试应该通过了。 我通常使用 angular 和 typescript 开发我的前端,但对于 reactJS 它应该看起来相似。

test('test if function was called', async () => {
  jest.spyOn(component, 'handleCreatedOrder').mockImplementation();
  await acquireOrder();
  expect(component.handleCreatedOrder).toHaveBeenCalled();
}

运行 acquireOrder function 后,您可能需要在测试中添加 changeDetector。 在 typescript 中,我通常在像这样运行 function 后添加fixture.detectChanges

fixture.detectChanges();

我还注意到您在 function 之后缺少 ()。

function acquireOrder(){
  if(condition) handleCreatedOrder()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM