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

问题描述 投票:0回答:1

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

测试:

it('test1', function() {

    let testResult = testFunction();

     assert.equal(testResult,'success');


 });

Promise:

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

testFunction()

testFunction = () => {

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

         }

结果:AssertionError [ERR_ASSERTION]:未定义=='成功'

javascript unit-testing mocha
1个回答
0
投票

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();
  });
});
© www.soinside.com 2019 - 2024. All rights reserved.