当前位置: 首页 > 知识库问答 >
问题:

如何用摩卡测试Promise catch

家西岭
2023-03-14

我正在尝试从请求模块测试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)));
};

下面是我如何测试 部分的:

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();
    }
  );
});

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

有什么建议吗?

它也将帮助我解决这个问题,一个简单的例子,另一个代码测试一个承诺的catch部分。

共有1个答案

雍焱
2023-03-14

为了测试catch,我编写了以下代码:

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();
        }
    );
});
 类似资料:
  • 问题内容: Mocha尝试在默认情况下查找测试文件,如何指定另一个目录,例如? 问题答案: 编辑:不建议使用此选项:https://mochajs.org/#mochaopts 如果要通过仍然仅在命令行上运行但要在文件夹而不是中运行测试来执行此操作,请在文件中创建一个文件,其中包含以下内容: 如果要运行该文件夹和子目录中的所有内容,请将其放入 是通过命令行传递的参数,因此使第一行也就是您要更改测试

  • 我正在使用mocha和chai对AngularJS服务执行一些单元测试。该服务具有不同的功能,每个功能都返回一个promise。 我面临的问题是,测试不是在断言之前等待promise值得到解决。我知道做()回调可以用摩卡。所以,我试着用它。但这也给了我一个错误。这是代码: 因此,现在的问题是测试没有失败(它应该失败)。相反,它只是超时并给我一个错误:“超时超过2000ms。请确保在此测试中调用了d

  • 以下测试表现异常: 我应该如何正确处理被拒绝的promise(并测试它)? 如何正确处理失败的测试(即:

  • 我正试着用摩卡和柴对我的猫鼬模型做一个简单的测试 错误:超过2000毫秒的超时时间。对于异步测试和挂钩,确保调用“done()”;如果返回promise,请确保它已解决 我想摩卡已经改变了,因为它一直在与以前的项目合作。我错过了什么? 模型方法:

  • 问题内容: 以下测试的行为异常: 我应该如何正确处理被拒绝的承诺(并进行测试)? 我应该如何正确处理失败的测试(即:? 这是我正在测试的实现: 问题答案: 最简单的方法是使用Mocha在最新版本中提供的内置Promise支持: 或者使用现代Node和async / await: 因为这种方法是端到端的承诺,所以它更易于测试,您不必考虑正在考虑的奇怪情况,就像到处都是奇怪的电话一样。 这是Mocha

  • 我正在使用node.js和摩卡单元测试,我希望能够通过npm运行测试命令。当我在测试文件夹中运行摩卡测试时,测试成功运行。但是,当我运行npm测试时,测试给我一个错误。 下面是我的package.json的一个片段: 有人知道为什么npm测试会给我一个错误,但是mocha测试运行正常吗? 谢谢