如何测试包含异步函数的nodejs导出

时间:2014-01-24 07:52:06

标签: javascript node.js express coffeescript mocha

我不确定如何测试nodejs的exports函数。请考虑以下代码:

exports.create_expense = (req, res, next) ->
  User = database.db_model 'user'
  req.body.parsed_dt = Date.parse(req.body.date)
  req.body.amount = parseInt(req.body.amount)
  User.update {_id: req.api_session.id}, {$push: {expenses: req.body}}, (err, numberAffected, raw) ->
    if err?
      res.send 500
    else 
      res.send 200

User在这里是一个猫鼬对象。我想编写一个测试(使用mocha)来测试这个函数(在我的测试中我将调用create_expense),但由于User.update是异步的,我不能只调用create_expense而不通过某种形式的承诺?我知道我可以使用超级,但也测试我不想在这里做的路线。有没有办法测试这个任何npm这里有用吗?

1 个答案:

答案 0 :(得分:1)

User.update,您应该致电next。稍后在测试中,您应该致电done

修改

提前抱歉我的CoffeeScript。

在回调结束时拨打next User.update

您的测试看起来应该是这样的:

describe '#create_response', () ->
  response = false

  req.body.date = new Date
  req.body.amount = 123
  req.api_session.id = 'asd'

  res.send = (code) ->
    response = code

  it 'should return 500 on invalid request', (done) ->
    create_expense req, res, () ->
      assert.equal response, 500
      done