我正在监视的函数,接收对象作为参数。我需要断言该函数是用对象的某些属性调用的。
例如:我的SUT具有:
function kaboom() {
fn({
foo: 'foo',
bar: 'bar',
zap: function() { ... },
dap: true
});
}
在我的测试中,我可以这样做:
fnStub = sinon.stub();
kaboom();
expect(fnStub).to.have.been.called;
并且有效(很高兴知道fn
被调用了)。现在,我需要确保正确的对象已传递到函数中。我只关心foo
和bar
属性,即我必须为参数的特定属性设置匹配项。怎么样?
upd:sinon.match()似乎适用于简单对象。让我们提高标准吧?
如果我想在断言中包含zap
函数怎么办?我该如何工作?
假设您正在使用sinon-chai,则可以将calledWith
与sinon.match一起使用来实现此目的
expect(fnStub).to.have.been.calledWith(sinon.match({
foo: 'foo',
bar: 'bar'
}));
您也可以使用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' });