【问题标题】:How to test asynchonous functions using sinon?如何使用 sinon 测试异步函数?
【发布时间】:2019-04-24 11:15:02
【问题描述】:

我有一个名为 PostController 的类,我尝试测试以下函数 create:

class PostController {
  constructor(Post) {
    this.Post = Post;
  }

  async create(req, res) {
    try {
      this.validFieldRequireds(req);
      const post = new this.Post(req.body);
      post.user = req.user;
      ...some validations here
      await post.save();
      return res.status(201).send(message.success.default);
    } catch (err) {
      console.error(err.message);
      const msg = err.name === 'AppError' ? err.message : 
      message.error.default;
      return res.status(422).send(msg);
    }
 }

我的测试课是:

import sinon from 'sinon';
import PostController from '../../../src/controllers/posts';
import Post from '../../../src/models/post';

describe('Controller: Post', async () => {
  it.only('should call send with sucess message', () => {
    const request = {
      user: '56cb91bdc3464f14678934ca',
      body: {
        type: 'Venda',
        tradeFiatMinValue: '1',
        ... some more attributes here
      },
    };
    const response = {
      send: sinon.spy(),
      status: sinon.stub(),
    };

    response.status.withArgs(201).returns(response);
    sinon.stub(Post.prototype, 'save');
    const postController = new PostController(Post);

    return postController.create(request, response).then(() => {
      sinon.assert.calledWith(response.send);
    });
  });
});

但我收到以下错误:

错误:超过 5000 毫秒的超时。对于异步测试和钩子,确保 “完毕()” 叫做;如果返回 Promise,请确保它已解决。 (D:\projeto\mestrado\localbonnum-back-end\test\unit\controllers\post_spec.js)

为什么?

【问题讨论】:

    标签: sinon


    【解决方案1】:

    很可能是因为滥用sinon.stub

    你已经

    sinon.stub(Post.prototype, 'save');
    

    不知道这个存根会做什么,所以原则上这个存根什么都不做(意味着它返回undefined)。 IDK,为什么你没有看到其他类似的尝试等待存根。 不过,您应该正确配置“保存”存根 - 例如这样:

    const saveStub = sinon.stub(Post.prototype, 'save');
    saveStub.resolves({foo: "bar"});
    

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 1970-01-01
      • 2020-11-05
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多