如何在Sinon中存根具有多个参数的猫鼬方法?

小酒瓶

我在 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 存根这样的方法。

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 不是函数。

您能否阐明如何存根具有多个关联函数的 DAO 方法?

幻灯片p2

这是单元测试解决方案:

dao.js

const Post = require("./models/post");

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

module.exports = {
  findPostsByCategoryId,
};

./models/post.js

// simulate Post model
const Post = {
  find(where) {
    return this;
  },
  sort(...args) {
    return this;
  },
  skip(...args) {
    return this;
  },
  limit(n) {},
};

module.exports = Post;

dao.test.js

const dao = require("./dao");
const Post = require("./models/post");
const sinon = require("sinon");
const { expect } = require("chai");

describe("Name of the group", () => {
  afterEach(() => {
    sinon.restore();
  });
  it("should pass", () => {
    sinon.stub(Post);
    Post.find.returnsThis();
    Post.sort.returnsThis();
    Post.skip.returnsThis();
    const mResponse = { rowCount: 100 };
    Post.limit.resolves(mResponse);

    return dao.findPostsByCategoryId(1, 2, 3).then((response) => {
      expect(response).to.be.eql(mResponse);
      sinon.assert.calledWithExactly(Post.find, { categoryId: 1 });
      sinon.assert.calledWithExactly(Post.sort, { createdAt: -1 });
      sinon.assert.calledWithExactly(Post.skip, 2);
      sinon.assert.calledWithExactly(Post.limit, 3);
    });
  });
});

带有覆盖率报告的单元测试结果:

  54920719
    ✓ should pass


  1 passing (14ms)

-----------------|----------|----------|----------|----------|-------------------|
File             |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
-----------------|----------|----------|----------|----------|-------------------|
All files        |    89.66 |      100 |    55.56 |    89.66 |                   |
 54920719        |      100 |      100 |      100 |      100 |                   |
  dao.js         |      100 |      100 |      100 |      100 |                   |
  dao.test.js    |      100 |      100 |      100 |      100 |                   |
 54920719/models |       40 |      100 |        0 |       40 |                   |
  post.js        |       40 |      100 |        0 |       40 |            4,7,10 |
-----------------|----------|----------|----------|----------|-------------------|

源代码:https : //github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/54920719

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用sinon模拟/存根猫鼬findById

来自分类Dev

Sinon猫鼬模型的存根保存实例方法

来自分类Dev

如何在猫鼬中编辑所有键

来自分类Dev

如何在猫鼬中创建/查找?

来自分类Dev

在猫鼬中具有多个键的唯一性

来自分类Dev

如何在猫鼬中按多个字段排序的列表中获得项目排名

来自分类Dev

如何在猫鼬中添加架构方法?

来自分类Dev

如何声明sinon猫鼬存根

来自分类Dev

如何使用Sinon在单元测试中对猫鼬模型方法进行存根

来自分类Dev

如何在select方法中调用猫鼬方法

来自分类Dev

如何在Boost C ++中对具有多个参数的函数使用二等分方法

来自分类Dev

如何在猫鼬中查找多个数据?

来自分类Dev

如何在猫鼬中设置ObjectId?

来自分类Dev

如何在猫鼬中创建多个对象数组?

来自分类Dev

如何在猫鼬中编辑所有键

来自分类Dev

用sinon模拟/存根猫鼬findById

来自分类Dev

sinon中具有异步回调的存根方法

来自分类Dev

如何在猫鼬中查找数据?

来自分类Dev

使用Sinon对猫鼬模型进行存根

来自分类Dev

如何在猫鼬模型中存根方法?

来自分类Dev

如何在MiniTest中对带有参数的方法进行存根

来自分类Dev

如何在猫鼬的单个键中迭代多个值

来自分类Dev

如何在猫鼬查询方法中返回错误?

来自分类Dev

具有多个参数的猫鼬 findOne 不起作用

来自分类Dev

sinon:如何存根实例方法

来自分类Dev

实例方法如何在猫鼬中工作?

来自分类Dev

如何在 sinon 中存根回调结果?

来自分类Dev

Mocha + Sinon 测试猫鼬方法被调用

来自分类Dev

如何在猫鼬中查找具有重复属性的文档?