簡體   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