SinonJS:带有精确对象的calledWith()

时间:2018-01-05 17:02:57

标签: angular unit-testing sinon

我正在尝试测试我的Sinon测试中的间谍是否被一个确切的对象调用:没有遗漏属性,没有其他属性和没有更改属性。

我有这个:

assert( viewer.entities.add.calledWith( completeEntityObject ) );

但如果我省略了completeEntityObject的某些属性,则测试成功。我希望它失败。我想深入比较一下。

我已经尝试过查看sinon.match方法,但是,虽然对于数组的测试非常相等,但对象没有这样的测试。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:0)

我找到了解决方案。我用过这个:

sinon.assert.calledWith( addStub, sinon.match( cesiumPartialEntityObject ) );

如果缺少或有其他属性,则会失败。

答案 1 :(得分:0)

对于任何想如何断言您的sinon间谍是通过某些参数进行调用的人来说,这是一个简单的示例。

  const spy = sinon.spy();

  // If spy is ever called in your code with some arguments, like so:
  spy({ hello: 'world'});

  // You can assert for it in your tests like this:
  expect(spy.getCall(0).calledWith(sinon.match({ hello: 'world' }))).to.be.true;

  // Breaking this down a bit:
  // spy.getCall(0) gives us the first time our spy function was called (because it can be called more than once)

  // Bonus: While debugging, you can use spy.getCalls()[0].args[0] to get the arguments that your spy function was called with.

我希望这会有所帮助-这是我的第一个SO回复,因此,如果我违反规则或者没有详细解释事情,请原谅我。