sinon mock withArgs 中具有未知值的对象 - sinon.match

Object with unknown values in sinon mock withArgs - sinon.match

我正在尝试创建一个单元测试来测试我的代码创建的对象是否已成功发送到更新函数(目前不测试更新函数,因为那将是一个集成测试)。

我想做的是使用 sinon mock 检查更新方法的输入是否正确:

var objectToUpdate = {
    "_id": 55f019a32f55b4508b05a155,  //mongodb _id assigned earlier in the code
    etc...
}

var mock = sinon.mock(MyClass.prototype);
mock.expects("update").once().withArgs([objectToUpdate]);
otherClass.functionThatCallsUpdate(function(error, result){
  (typeof error).should.equal.null;
  mock.verify();
  mock.restore();
  done();
});

问题是我正在测试的代码是数据库填充代码的一部分,所以我不知道在测试之前对象的 _id 是什么 运行 因为它是较早创建的在此过程中,因此测试的 withArgs() 部分失败了。

是否可以在 sinon mock 中为 withArgs() 指定部分对象,或者我应该使用另一种方法吗?

一个不太有用(但总比没有好)的选项是能够指定对包含 objectToUpdate 的数组大小的期望值,但我也找不到这样做的方法。

可以通过从对象中删除 _id 并使用 sinon.match:

来完成这项工作
mock.expects("update").once().withArgs([sinon.match(objectToUpdate)]).yields(null);