【问题标题】:How to test a specific sequence of calls to the same function with jest如何用 jest 测试对同一函数的特定调用序列
【发布时间】:2020-08-27 00:02:08
【问题描述】:

我有一个正在尝试测试的类,它会开玩笑地调用一个模拟函数:

我有一个模拟 Gpio 类构造函数,它在这些属性后面创建对象实例。 mock 类有 digitalWrite 的 mock 方法:

当我运行测试时,我可以看到对 digitalWrite 的调用顺序:

但我不知道如何测试序列是否正确。我觉得如果我能看到测试失败提示中的顺序,我应该能够说“首先用 0 调用,然后用 0 调用,然后用 1 调用”,但我不太清楚该怎么做.有什么想法吗?

另外,为了不被指出:我知道从技术上讲,每个 pin 实例都应该是独立的,我应该能够单独测试它们,但是以开玩笑的方式模拟构造函数,我必须使用digitalWrite 的相同模拟函数。

【问题讨论】:

    标签: typescript unit-testing jestjs


    【解决方案1】:

    你可以用jest的.toHaveBeenNthCalledWith()

    例如

    it('should be called in the following sequence', () => {
      expect(......digitalWrite).toHaveBeenNthCalledWith(1, 0)
      expect(......digitalWrite).toHaveBeenNthCalledWith(2, 0)
      expect(......digitalWrite).toHaveBeenNthCalledWith(3, 1)
    })
    

    或者您可以使用模拟函数的mock.calls 属性:

    it('should be called in the following sequence', () => {
      expect(......digitalWrite).toHaveProperty('mock.calls', [
        [0], [0], [1]
      ])
    })
    

    【讨论】:

    • 哦,太好了!是的,这很完美。很高兴知道第二个选项,这似乎会使这个测试更具可读性。谢谢!!
    猜你喜欢
    • 2022-01-24
    • 2020-01-24
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    相关资源
    最近更新 更多