已通过对象断言调用

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

我正在监视的函数,接收对象作为参数。我需要断言该函数是用对象的某些属性调用的。

例如:我的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函数怎么办?我该如何工作?

javascript unit-testing sinon sinon-chai
2个回答
22
投票

假设您正在使用sinon-chai,则可以将calledWithsinon.match一起使用来实现此目的

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

0
投票

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

链接:

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

用法:

expect(fnStub).to.have.been.called.with.objectContaining({ foo: 'foo',bar: 'bar' }); 
© www.soinside.com 2019 - 2024. All rights reserved.