【问题标题】:Testing async function with mocha always ends with .catch()用 mocha 测试异步函数总是以 .catch() 结尾
【发布时间】:2017-08-25 08:12:09
【问题描述】:

我正在尝试测试一个通用的 fetch 函数,它基于服务器响应调用相应的回调。 所以,函数看起来有点像这样:

const myFetch = (url, body, onSuccess, onError) => {
  let status = 0;
  fetch(url, header(body))
  .then(response => {
    status = response.status;
    return response.json();
  })
  .then(jData => {
    switch (status) {
      case 200:
      case 201:
        onSuccess(jData, 'success');
        break;
      default:
        onError([], 'error');
        break;
    }
  })
  .catch(() => {
    onError([], 'error');
  });
};

所以在我的 mocha 测试中,我试图断言由 onSuccess() 或 onError() 回调传递的消息:

it('should perform fetch', function (done) {
    this.timeout(5000);
    const url = 'http://httpstat.us/201';

    const onSuccess = (res, mes) => {
      expect(mes).eq('success');
      done();
    };

    const onError = (err, mes) => {
      expect(mes).eq('error');
      done();
    };

    Utils.myFetch(url, null, onSuccess, onError);
  });

然而,虽然我知道返回了 201,但我似乎总是进入.catch() 部分的提取,所以我从未真正进入onSuccess 回调。

我做错了什么吗?将不胜感激任何帮助!

【问题讨论】:

    标签: asynchronous mocha.js


    【解决方案1】:

    解决了,不是真正的mocha问题:原因是第一个promise中的return response.json();,而使用的服务返回的是纯文本类型的内容。

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2014-02-08
      • 1970-01-01
      • 2018-10-02
      • 2016-06-19
      • 2015-04-04
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多