摩卡不等待承诺解决方案

时间:2017-03-01 17:24:21

标签: javascript node.js mongodb mongoose mocha

我正在使用Mocha来使我的测试和异步模块与mongoose一起使用。当我进行简单的测试以从我的生产代码中获取信息时,它可以正常工作。以下代码工作精细:

/lib/main.js

  saveClient () {
    let user
    async.waterfall([
      function (callback) {
        let firstFunction = 'First'
        callback(null)
      },
      function (callback) {
        let userId
        let secondFunction = 'second'
        async.waterfall([
          function (callback) {
            callback(null, 'Hi world')
          }
        ], function (err, results) {
          if (err) return console.log(err)
          userId = results
        })
        callback(null, userId)
      }
    ], function (err, results) {
      if (err) return console.log(err)
      user = results
    })
    return user
  }

/test/test-main.js

const main = require('./lib/main')

  it('create client', function (done) {
    let promiseClient = new Promise(function (resolve, reject) {
      resolve(main.saveClient())
    })
    promiseClient.then(function (result) {
      console.log(result)
      assert.typeOf(db.saveClient, 'function', 'saveClient is a function')
      done()
    })
  })

在这里,我得到的结果是'Hi world'

但是,当我使用mongoose及其例程实现相同的代码时,我得不到我想要的结果。这是代码:

/lib/main.js

  saveClient () {
    let user
    async.waterfall([
      function (callback) {
        let conn = LisaClient.connection
        conn.on('error', console.error.bind(console, 'connection error...'))
        conn.once('open', function (err, db) {
          if (err) return console.log('error')
          callback(null)
        })
      },
      function (callback) {
        let userId
        let ClientSchema = new LisaSchema({ })
        let Client = LisaClient.model('Client', ClientSchema)
        let client = new Client({ })
        async.waterfall([
          function (callback) {
            client.save().then(callback(null, client._id))
          }
        ], function (err, results) {
          if (err) return console.log(err)
          userId = results
        })
        callback(null, userId)
      }
    ], function (err, results) {
      if (err) return console.log(err)
      user = results
    })
    return user
  }

/test/test-main.js

const main = require('./lib/main')

  it('create client', function (done) {
    let promiseClient = new Promise(function (resolve, reject) {
      resolve(main.saveClient())
    })
    promiseClient.then(function (result) {
      console.log(result)
      assert.typeOf(db.saveClient, 'function', 'saveClient is a function')
      done()
    })
  })

在最后一次测试中,我总是得到'未定义'。我认为是因为mocha不等待解析main.saveClient()。我能做什么?。我使用了async / await,得到了相同的结果

0 个答案:

没有答案