已经被对象断言调用

时间:2015-06-15 22:25:01

标签: javascript unit-testing sinon sinon-chai

功能I'监视,接收对象作为参数。我需要声明函数是使用对象的某些属性调用的。

例如:我的SUT有:

function kaboom() {

    fn({ 
        foo: 'foo', 
        bar: 'bar', 
        zap: function() { ... },
        dap: true
     });
}

在我的测试中,我可以这样做:

fnStub = sinon.stub();
kaboom();
expect(fnStub).to.have.been.called;

这是有效的(很高兴知道fn已被调用)。现在我需要确保已将正确的对象传递给函数。我只关心foobar属性,即我必须为参数的特定属性设置匹配。怎么样?

upd:sinon.match()似乎适用于简单的对象。让我们提高吧,不是吗?

如果我想将zap函数包含在断言中怎么办?我该如何做到这一点?

2 个答案:

答案 0 :(得分:19)

假设您正在使用sinon-chai,您可以使用calledWithsinon.match来实现此目标

expect(fnStub).to.have.been.calledWith(sinon.match({
  foo: 'foo',
  bar: 'bar'
}));

答案 1 :(得分:0)

您还可以使用 chai-spies-augment 软件包(https://www.npmjs.com/package/chai-spies-augment):

要链接:

'^(\s*[a-z]+\s*)*$

用法:

import chaiSpies from 'chai-spies';
import chaiSpiesAugment from 'chai-spies-augment';
 ...
chai.use(chaiSpies);
chai.use(chaiSpiesAugment);