使用Sinon来存根链接的Mongoose调用

Nep*_*oxx 11 mongoose node.js sinon

我得到了如何对Mongoose模型进行存根(感谢用Sinon一个Mongoose模型进行Stubbing),但是我不太明白如何将调用存根如下:

myModel.findOne({"id": someId})
    .where("someBooleanProperty").equals(true)
    ...
    .exec(someCallback);
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

var findOneStub = sinon.stub(mongoose.Model, "findOne");
sinon.stub(findOneStub, "exec").yields(someFakeParameter);
Run Code Online (Sandbox Code Playgroud)

没有用,有什么建议吗?

Nep*_*oxx 18

我通过执行以下操作解决了这个问题:

var mockFindOne = {
    where: function () {
        return this;
    },
    equals: function () {
        return this;
    },
    exec: function (callback) {
        callback(null, "some fake expected return value");
    }
};

sinon.stub(mongoose.Model, "findOne").returns(mockFindOne);
Run Code Online (Sandbox Code Playgroud)


Gon*_*Gon 7

看看sinon-mongoose.您可以只用几行来预测链式方法:

sinon.mock(YourModel).expects('findOne')
  .chain('where').withArgs('someBooleanProperty')
  .chain('exec')
  .yields(someError, someResult);
Run Code Online (Sandbox Code Playgroud)

您可以在回购中找到工作示例.

另外,建议:使用mock方法代替stub,即检查方法确实存在.