繁体   English   中英

为什么在测试使用 promise 的函数时 Mocha 返回 undefined?

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

在测试使用 promise 的函数时,我遇到了 Mocha 返回错误结果的问题。 不知道为什么它返回“未定义” - 被调用的函数 (testFunction()) 在承诺完成之前不应该返回。

测试:

it('test1', function() {

    let testResult = testFunction();

     assert.equal(testResult,'success');


 });

承诺:

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

测试函数()

testFunction = () => {

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

         }

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

testFunction中没有 return 语句,因此它返回 undefined。 回调中的返回只决定回调返回什么,而不是 testFunction 返回什么。

由于您正在处理承诺,因此您将不得不返回承诺。 您不能返回字符串,因为该字符串尚不存在。 因此,testFunction 可能如下所示:

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

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

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

您需要编写测试以期望返回承诺。 如果您使用异步函数,这是最简单的,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM