为什么 Mocha 在测试使用承诺的函数时返回未定义?

Why is Mocha returning undefined when testing function that uses a promise?

我在测试使用承诺的函数时遇到 Mocha 返回错误结果的问题。不确定它为什么返回 "undefined" - 被调用的函数 (testFunction()) 在承诺完成之前不应返回。

测试:

it('test1', function() {

    let testResult = testFunction();

     assert.equal(testResult,'success');


 });

承诺:

getPromise() {
  return new Promise((resolve, reject) => { 
          resolve('success');
      }
}

testFunction()

testFunction = () => {

               getPromise().then(result => { return result}
      ).catch(error =>{  return error });

         }

结果: 断言错误[ERR_ASSERTION]:未定义=='success'

testFunction 中没有 return 语句,因此它是 return 未定义的。回调中的 return 只决定回调 return 是什么,而不是 testFunction returns.

由于您处理的是承诺,因此您将不得不 return 一个承诺。你不能 return 一个字符串,因为那个字符串还不存在。所以,testFunction 可能看起来像这样:

testFunction = () => {
  return getPromise()
    .then(result => { return result })
    .catch(error => { return error });
}

但是这个 .then 没有做任何事情,所以除非有一些您没有提到的额外代码,否则可以将其删除:

testFunction = () => {
  return getPromise()
    .catch(error => { return error; });
}

您的测试需要编写为期望 returned 的承诺。如果您使用异步函数,这是最简单的,如:

it('test1', async function () {
  let testResult = await testFunction();
  asset.equal(testResult, 'success');
});

或者,您可以使用 done 回调来告诉测试您的异步工作何时完成。

it('test1', function (done) {
  let promise = testFunction();
  promise.then(testResult => {
    assert.equal(testResult, 'success');
    done();
  });
});