不确定在JavaScript中使用异步和回调

时间:2018-10-02 14:20:09

标签: javascript node.js async-await mocha

说明:

我在Node-App中进行了Mocha测试,该测试应该测试Mongo-DB-JSON-Documents的DB-Export是否正确完成。 在我的测试中,除了其他测试,我还测试下载目录是否为空。

预期结果:

测试应等待下载,然后检查目录是否为空。

实际结果:

测试始终返回绿色。

我的问题:

我知道我们有回调,但是诺言更好。 我知道异步等待是对诺言的一种语法糖。 而且我知道甚至还有RxJS(在此不使用)

我必须以某种方式处理来自mogodb-backup的回调。 参见https://www.npmjs.com/package/mongodb-backup

我不明白自己在做什么错,以便测试始终变为绿色(与下载并行运行)

mocha-test.js

call_http() {
    this.http.get<any>('/api/goes/here').pipe(
      map(res => this.result = res),
      catchError(err => do something with err)
    ).subscribe();
}

要测试的数据库模块.js

describe('Database.downloadDocumentsOfType_KEYS()', function () {
  it('should result in data/exportFromCosmos/KEYS/admin/ag-data/ not being empty', function () {
    const config = {
      documents: ['DEFAULT', 'KEYS'],         
      exportpathDEFAULT: 'data/exportFromCosmos/DEFAULT/',
      exportpathKEYS: 'data/exportFromCosmos/KEYS/',
      uploadpath: 'data/uploadToAzureBlob/',
      crosscheckFile: 'data/crosscheckFile.txt'
    }

    async function f() {
      await Database.downloadDocumentsOfType_KEYS().then(expect(dir(config.exportpathKEYS + 'admin/ag-data/')).to.not.be.empty)
    }

    f()
  })
})

1 个答案:

答案 0 :(得分:3)

async function f() {
  await Database.downloadDocumentsOfType_KEYS().then(e)
}

f()

这将立即触发异步功能,并且

it('...', function (){}) 

立即完成。

因此您需要使用

describe('...',async function(){
  it('...',async function(){
   const f = async function(){
     await Database.downloadDocumentsOfType_KEYS();
     expect(dir(config.exportpathKEYS + 'admin/ag-data/')).to.not.be.empty);
   };
   await f();
  });
});

也是

new Promise((resolve) => mongodbbackup({...

应该是

new Promise((resolve,reject) => mongodbbackup({

否则,拒绝是undefined