unit-testing - 如何用 Mocha 测试 Promise catch

标签 unit-testing promise ecmascript-6 mocha.js chai

我正在尝试从请求模块测试 GET HTTP 方法:

const get = (host, resource, options) => {
  ...
  return new Promise((resolve, reject) => fetch(url, opts)
    .then(response => {
      if (response.status >= 400) {
        reject({ 
        message: `[API request error] response status: ${response.status}`, 
        status: response.status });
      }
      resolve(response.json());
    })
    .catch(error => reject(error)));
};

以下是我测试 .then 的方法部分:
it('Wrong request should return a 400 error ', (done) => {
    let options = { <parameter>: <wrong value> };
    let errorJsonResponse = {
    message: '[API request error] response status: 400',
    status: 400,
};
let result = {};

result = get(params.hosts.api, endPoints.PRODUCTS, options);

result
  .then(function (data) {
      should.fail();
      done();
    },

    function (error) {
      expect(error).to.not.be.null;
      expect(error).to.not.be.undefined;
      expect(error).to.be.json;
      expect(error).to.be.jsonSchema(errorJsonResponse);
      done();
    }
  );
});

但是我没有找到测试捕获部分的方法(当它给出错误并且响应状态不是> = 400时)。

有什么建议么?

它还可以帮助我用另一个测试 Promise 的捕获部分的代码的简单示例来解决问题。

最佳答案

我最终编写了以下代码来测试捕获:

it('Should return an error with invalid protocol', (done) => {
    const host = 'foo://<host>';
    const errorMessage = 'only http(s) protocols are supported';
    let result = {};

    result = get(host, endPoints.PRODUCTS);

    result
      .then(
        () => {
          should.fail();
          done();
        },

        (error) => {
          expect(error).to.not.be.null;
          expect(error).to.not.be.undefined;
          expect(error.message).to.equal(errorMessage);
          done();
        }
    );
});

关于unit-testing - 如何用 Mocha 测试 Promise catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706448/

相关文章:

javascript - 最初的 promise 成功后又拒绝内心的 promise ?

javascript - 带有必需参数的 typescript 解构

javascript - function.apply.bind 在以下代码中如何工作?

javascript - JS - Object.keys() 中的三元语句

javascript - JavaScript 中的 Promise 顺序

javascript - 将 jQuery .each 中具有多个 .get() 的函数转换为 q Promise

c# - 使用 Moq 确定方法是否被调用

django - 使用 Django 缓存中间件导致 contrib.auth 单元测试失败

unit-testing - 无论我是否抛出异常,JUnit 测试都会通过

java - 如何使用 mockito 为同一类的私有(private)方法 stub 返回值