对没有调用callback的NodeJS函数进行摩卡testing

我有一个function,使用Facebook页面发送消息给Facebook用户。

// send text message to an user function sendTextMessage(sender, text, callback) { messageData = { text: text } request({ url: 'https://graph.facebook.com/v2.6/me/messages', qs: { access_token: token }, method: 'POST', json: { recipient: { id: sender }, message: messageData, } }, function (error, response, body) { if (error) { console.log('Error sending message: ', error); callback(-1); } if (response.body.error) { console.log('Error: ', response.body.error); return -2; } else{ console.log('Ok: ' + JSON.stringify(body)); callback(1); return response; } }); } 

我的问题是,当我在命令行上运行此代码时,它工作正常,但是,我正在尝试使用摩卡创build一个testing。

 it('Text Message', function(){ var fb_answer = function(res){ // first schema to be compared var fbTextAnswerSchema = { "title": "fb answer schema v1", "type": "object", "required": ["recipient_id", "message_id"], "recipient_id": { "type": "string" }, "message_id": { "type": "string" } }; expect(res).to.be.jsonSchema(fbTextAnswerSchema); } messenger.sendTextMessage(sender, "[TEST] Testing send text message", fb_answer); }); 

当我在命令行上运行mocha来调用这个testing时,它不仅会通过,而且也不会打印响应的主体。

基本上有什么奇怪的是,当我运行使用节点的代码打印响应,当我用摩卡运行,它不,这使我认为,请求的callback没有被称为…

我需要通过一个testing函数作为callback函数来处理响应。

为什么不打印回应? 为什么callback没有被调用? 有没有更好的方法来testing这种function?

先谢谢了。

你可以在一个describe块中做这样的事情。 所有的mocha钩子函数都有一个donecallback函数,可以用来驯服asynchronous调用,并在断言之前设置你的环境

 // first schema to be compared var fbTextAnswerSchema = { "title": "fb answer schema v1", "type": "object", "required": ["recipient_id", "message_id"], "recipient_id": { "type": "string" }, "message_id": { "type": "string" } }; var res; before(function(done){ messenger.sendTextMessage(sender, "[TEST] Testing send text message", function(response){ res = response; done() }); }) it('Text Message', function(){ expect(res).to.be.jsonSchema(fbTextAnswerSchema); }); 

要不就

 it('Text Message', function(done){ messenger.sendTextMessage(sender, "[TEST] Testing send text message", function(response){ expect(res).to.be.jsonSchema(fbTextAnswerSchema); done() }); }); 

这是你select的风格问题