Javascript 如何测试包含异步函数的nodejs导出
我不知道如何测试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
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 fakeres
中,最后调用done
(框架应在测试用例中通过)。是的,您应该先编写测试,然后实现代码。非常感谢。我试着看看是否有其他方法,而不必为测试打电话给next。我们习惯了java有一种方法可以与间谍“编织”这种东西。再次感谢,真是帮了大忙!:)