1
我有一個功能,使用Facebook頁面發送消息給Facebook用戶。摩卡測試NodeJS功能不調用回調
// 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;
}
});
}
我的問題是,當我在命令行上運行此代碼時,它工作正常,但是,我試圖爲此使用摩卡創建一個測試。
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);
});
當我運行命令行調用這個測試摩卡,它不僅通過,但它也不會打印響應體。
基本上這裏有什麼奇怪的是,當我運行使用節點代碼打印響應,並且當我用摩卡運行時,它沒有,這使我認爲請求的回調沒有被調用。 ..
我需要將測試函數作爲回調傳遞給此函數以處理響應。
爲什麼不打印迴應?爲什麼回調沒有被調用?有沒有更好的方法來測試這種功能?
謝謝先進。
謝謝,這解決了我的問題。有沒有一種方法不使用res作爲全局?因爲我想測試這樣的三種不同的函數,並且聽起來不像是製作三個全局變量的好方法。另外,我需要運行sendTextMessage的其他兩種變體,是否有爲每個測試創建一個before語句的方法? – Ernanirst