Javascript 摩卡咖啡测试-罐装';使用async/await无法通过被拒绝承诺的测试

Javascript 摩卡咖啡测试-罐装';使用async/await无法通过被拒绝承诺的测试,javascript,async-await,promise,mocha.js,chai,Javascript,Async Await,Promise,Mocha.js,Chai,使用mocha和chai,我试图通过第二次测试来获得被拒绝的承诺,但是我得到了这个错误错误:字符串“error”被抛出,抛出一个错误 function fn(arg) { return new Promise((resolve, reject) => { if (arg) { resolve('success') } else { reject('error') } }) } describe('Interpreting statu

使用mocha和chai,我试图通过第二次测试来获得被拒绝的承诺,但是我得到了这个错误
错误:字符串“error”被抛出,抛出一个错误

function fn(arg) {
  return new Promise((resolve, reject) => {
    if (arg) {
      resolve('success')
    } else {
      reject('error')
    }
  })
}

describe('Interpreting status', function() {
  it('should return the promise without error', async function(){
    const arg = true
    expect(await fn(arg)).to.equal('success')
  });

  it('should return the promise with an error', async function(){
    const arg = false
    expect(await fn(arg)).to.be.rejectedWith('error')
  });
});

这对我来说非常有效

const chai = require('chai');
const expect = chai.expect;
chai.use(require('chai-as-promised'));

function fn(arg) {
  return new Promise((resolve, reject) => {
    if (arg) {
      resolve('success');
    } else {
      reject(new Error('error'));
    }
  });
}

describe('Interpreting status', function () {
  it('should return the promise without error', async function () {
    const arg = true;
    expect(await fn(arg)).to.equal('success');
  });

  it('should return the promise with an error', async function () {
    const arg = false;
    await expect(fn(arg)).to.be.rejectedWith(Error);
  });
});

第二次测试的问题是,当您执行
wait fn(arg)
时,会抛出一个错误,而不是您期望的被拒绝的承诺。
因此,您会看到消息
Error:string“Error”被抛出,抛出一个错误:)

请记住,如果您
等待
拒绝承诺,则会抛出一个错误,必须使用
try…catch处理该错误
因此,如果您想使用
rejectedWith
进行测试,那么不要使用
async/await

此外,无论何时进行承诺拒绝,都应该使用错误而不是字符串进行拒绝。 我已将拒绝值更改为
newerror('Error')
,并在
rejectedWith

如果您严格按照您的用例进行操作,这应该适用于第二次测试,

  it('should return the promise with an error', async function () {
    const arg = false;
    try {
      await fn(arg);
      expect.fail();
    } catch (error) {
      expect(error).to.equal('error');
    }
  });

这对我来说非常有效

const chai = require('chai');
const expect = chai.expect;
chai.use(require('chai-as-promised'));

function fn(arg) {
  return new Promise((resolve, reject) => {
    if (arg) {
      resolve('success');
    } else {
      reject(new Error('error'));
    }
  });
}

describe('Interpreting status', function () {
  it('should return the promise without error', async function () {
    const arg = true;
    expect(await fn(arg)).to.equal('success');
  });

  it('should return the promise with an error', async function () {
    const arg = false;
    await expect(fn(arg)).to.be.rejectedWith(Error);
  });
});

第二次测试的问题是,当您执行
wait fn(arg)
时,会抛出一个错误,而不是您期望的被拒绝的承诺。
因此,您会看到消息
Error:string“Error”被抛出,抛出一个错误:)

请记住,如果您
等待
拒绝承诺,则会抛出一个错误,必须使用
try…catch处理该错误
因此,如果您想使用
rejectedWith
进行测试,那么不要使用
async/await

此外,无论何时进行承诺拒绝,都应该使用错误而不是字符串进行拒绝。 我已将拒绝值更改为
newerror('Error')
,并在
rejectedWith

如果您严格按照您的用例进行操作,这应该适用于第二次测试,

  it('should return the promise with an error', async function () {
    const arg = false;
    try {
      await fn(arg);
      expect.fail();
    } catch (error) {
      expect(error).to.equal('error');
    }
  });

如果你等待承诺,你会得到一个错误,而不是被拒绝的承诺。如果你等待承诺,你会得到一个错误,而不是被拒绝的承诺。