如何测试Sinon.js的函数调用序列?

问题描述 投票:11回答:2

如何测试Sinon.js的函数调用顺序?

例如,我在对象中有三(3)个处理程序,并希望定义处理程序调用的顺序。有可能吗?

javascript unit-testing sinon
2个回答
21
投票

http://sinonjs.org/docs/

sinon.assert.callOrder(spy1,spy2,...)

如果按指定顺序调用提供的间谍,则通过。


0
投票

如Gajus所述,callOrder()不再可用,您可以使用callBefore()calledAfter()calledImmediatelyBefore()calledImmediatelyAfter()

我发现通过使用spy.getCalls()获得所有呼叫并对呼叫参数进行assert.deepEqual()来断言一个间谍的顺序呼叫是最方便的。

示例-确认console.log()调用的顺序。

// func to test
function testee() {
  console.log(`a`)
  console.log(`b`)
  console.log(`c`)
}

在您的测试用例中

const expected = [`a`, `b`, `c`]
const consoleSpy = spy(console, 'log')

testee()

const result = consoleSpy.getCalls().map(({ args }) => args[0])

assert.deepEqual(result, expected)
© www.soinside.com 2019 - 2024. All rights reserved.