Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何测试包含异步函数的nodejs导出_Javascript_Node.js_Express_Coffeescript_Mocha.js - Fatal编程技术网

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

Javascript 如何测试包含异步函数的nodejs导出,javascript,node.js,express,coffeescript,mocha.js,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}, {$p

我不知道如何测试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
是这里的猫鼬对象。我想写一个测试(使用mocha)来测试这个函数(在我的测试中我会调用
create\u expense
),但是由于
User.update
是异步的,我不能在不传递某种形式的承诺的情况下调用
create\u expense
?我知道我可以使用supertest,但这也测试了我不想在这里做的路线。有什么方法可以测试这一点吗?这里的任何npm都是有用的?

关于
用户。更新
您应该调用
下一步
。稍后在测试中,您应该调用
done

编辑:

对不起,我提前准备了咖啡脚本

在对
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

我不知道你的意思。函数使用HTTP代码进行响应,它不需要调用next()。你是否建议我更改测试的应用程序代码?你有一个例子吗?传入假
req
和假
res
。发送响应后,调用
next
(应该是某种回调)。在
next
definition assert to fake
res
中,最后调用
done
(框架应在测试用例中通过)。是的,您应该先编写测试,然后实现代码。非常感谢。我试着看看是否有其他方法,而不必为测试打电话给next。我们习惯了java有一种方法可以与间谍“编织”这种东西。再次感谢,真是帮了大忙!:)