gpt4 book ai didi

node.js - 如何在Sinon中使用多个参数来 stub Mongoose 方法?

转载 作者:行者123 更新时间:2023-12-02 16:17:22 27 4
gpt4 key购买 nike

我在 Node.js 中使用 Mongoose,这是我的 DAO 方法。

function findPostsByCategoryId(categoryId, first, second) {
var sortingOrd = { 'createdAt': -1 };
return Post.find({ 'categoryId': categoryId }).sort(sortingOrd).skip(first).limit(second);
}

现在,我想使用 Sinon 在我的测试用例中 stub 这样的方法。

describe('findPostsByCategoryId', function () {
it('should find post by category id', function () {
var stub = sinon.stub(Post, 'find');
stub.callsFake(() => {
return Promise.resolve(posts);
});
postDao.findPostsByCategoryId(1, 2, 3).then(response => {
assert.length(response, 1);
})
.catch((error) => {
assert.isDefined(error);
});
});
});

这给我返回了一个错误,提示

TypeError: Post.find(...).sort is not a function.

您能否阐明如何对链接有多个函数的 DAO 方法进行 stub ?

最佳答案

要对像这样链接的函数进行单元测试,只需链接 stubspy 实例并验证它们是否使用预期值进行调用:

it('should find post by category id', function () {
const limitSpy = sinon.spy();
const skipStub = sinon.stub().returns({ limit: limitSpy });
const sortStub = sinon.stub().returns({ skip: skipStub });
const findStub = sinon.stub(Post, 'find').returns({ sort: sortStub });

postDao.findPostsByCategoryId(1, 2, 3);

sinon.assert.calledWithExactly(findStub, { 'categoryId': 1 }); // SUCCESS
sinon.assert.calledWithExactly(sortStub, { 'createdAt': -1 }); // SUCCESS
sinon.assert.calledWithExactly(skipStub, 2); // SUCCESS
sinon.assert.calledWithExactly(limitSpy, 3); // SUCCESS
});

关于node.js - 如何在Sinon中使用多个参数来 stub Mongoose 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54920719/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com