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

标签 javascript node.js express coffeescript mocha.js

我不知道如何测试nodejs的导出功能。考虑下面的代码:

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 在这里是一个 Mongoose 对象。我想编写一个测试(使用 mocha)来测试这个函数(在我的测试中我将调用 create_expense),但由于 User.update 是异步的,我不能只是调用 create_expense 而不传递某种形式的 Promise?我知道我可以使用 super 测试,但这也测试了我不想在这里做的路线。有没有办法测试一下这里的 npm 是否有用?

最佳答案

User.update上,您应该调用next。稍后在测试中您应该调用 done

编辑:

提前对我的 CoffeeScript 表示歉意。

User.update 回调结束时调用 next

你的测试应该看起来像这样:

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

关于javascript - 如何测试包含异步函数的nodejs导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21327229/

相关文章:

javascript - 使用 JavaScript 增加行数?

node.js - HTTP 错误 500.0 - 在 ISAPI 上调用 LoadLibraryEx 时发生内部服务器错误

javascript - 如何使用 Javascript/Node.js 从网站获取对象?

node.js - setupProxy 不工作 - http-proxy-middleware

javascript - 在 Angular 中使用 $http 应用curl POST 请求

javascript - 在javascript中向右滑动

javascript - AWS Cors 问题 - Node.js

json - 未进行 SSL 连接尝试时,MongoDB 提示 SSL 握手

node.js - 这个/build/config.gypi 文件是什么,我可以删除它吗?

node.js - ExpressJS 的 socket.io 设置