拒绝承诺的 catch 块中的摩卡测试失败

Fail mocha test in catch block of rejected promise

使用 axios 进行 http 调用时,如何使 catch 块中的承诺拒绝测试失败? 在 catch 块中添加期望、断言和 should 表达式无济于事。 测试通过。

我 运行 使用 .\node_modules\.bin\mocha

let chai = require('chai');
var expect = chai.expect;

var axios = require('axios')
var instance = axios.create({})

    describe('test', () => {

        context('test', () => {

        it('should succeed', () => {
            let url = 'url'
            instance.get(url)
                    .then(function(response) {
                        expect(response.data).not.to.be.null
                    } )
                    .catch(function(err) {
                        console.error(err.data) 
                        // should fail the test                                          
                    })


        })

        })
    })

如果您想验证我的建议,请将 url 值替换为有效的 url(例如:https://google.com

您可以尝试几种方法:

1) 使用 assert.fail()

const axios = require('axios');
const { assert, expect } = require('chai');

const instance = axios.create({})

describe('test', () => {
  context('test', () => {
    it('should succeed', () => {
      let url = 'abc'
      return instance.get(url)
        .then((res) => { 
          expect(res.data).not.to.be.null;
        })
        .catch((err) => {
          assert.fail('expected', 'actual', err);
        });
    });
  });
});

2) 将 done() 与错误对象一起使用

const axios = require('axios');
const { expect } = require('chai');

const instance = axios.create({})

describe('test', () => {
  context('test', () => {
    it('should succeed', (done) => {
      let url = 'abc'
      instance.get(url)
        .then((res) => { 
          expect(res.data).not.to.be.null;
          done();
        })
        .catch((err) => {
          done(err);
        });
    });
  });
});

3) 简单地抛出一个错误:)

const axios = require('axios');
const { expect } = require('chai');

const instance = axios.create({})

describe('test', () => {
  context('test', () => {
    it('should succeed', () => {
      let url = 'abc'
      return instance.get(url)
        .then((res) => { 
          expect(res.data).not.to.be.null;
        })
        .catch((err) => {
          throw err;
        });
    });
  });
})

如果您想检查该方法是否完全失败并且您希望如此,请按此方式进行(它需要 chai-as-promised 包):

const axios = require('axios');
const chai = require('chai');

chai.use(require('chai-as-promised'));
const instance = axios.create({})

describe('test', () => {
  context('test', () => {
    it('should succeed', () => {
      let url = 'abc'
      return chai.expect(instance.get(url)).to.be.rejected;
    });
  });
});