使用本机节点测试库模拟不同的调用

Mocking on different calls with native node test library

提问人:myol 提问时间:11/15/2023 最后编辑:myol 更新时间:11/15/2023 访问量:17

问:

我正在迁移项目以使用本机节点测试运行程序和模拟库。以前我用过.sinon

import { stub } from "sinon"

const myStub = stub()
  .onFirstCall().returns(1)
  .onFirstCall().returns(2)
  .onFirstCall().returns(3)

functionWhichExecutesMyStubThreeTimes()

我怎样才能用节点实现同样的目标?我尝试了以下方法;

import { mock } from "node:test"

const myMock = mock.fn().mock
myMock.mockImplementationOnce(() => 1)
myMock.mockImplementationOnce(() => 2)
myMock.mockImplementationOnce(() => 3)

functionWhichExecutesMyMockThreeTimes()

这是行不通的。的文档显示了一个基本示例,该示例使用模拟实现,调用它,然后根据需要再次模拟它以再次运行。mockImplementationOnce

我无法这样做,因为我的用例中的实现在“黑匣子”函数中进行了三次调用。因此,我需要模拟不同的实例,并且只运行一次模拟触发函数。functionWhichExecutesMyMockThreeTimes

节点.js 模拟 节点测试运行程序

评论


答:

0赞 myol 11/15/2023 #1

我没有仔细阅读类型签名;

mockImplementationOnce(implementation: Function, onCall?: number): void;
import { mock } from "node:test"

const myMock = mock.fn().mock
myMock.mockImplementationOnce(() => 1, 0)
myMock.mockImplementationOnce(() => 2, 1)
myMock.mockImplementationOnce(() => 3, 2)

functionWhichExecutesMyMockThreeTimes()