NodeJS 函数的 Mocha 测试不调用回调
Mocha Test for NodeJS Function not calling Callback
我有一个功能可以使用 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;
}
});
}
我的问题是,当我在命令行上 运行 这段代码时,它工作正常,但是,我正在尝试使用 mocha 为此创建一个测试。
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 在命令行上调用这个测试时,它不仅通过了,而且也没有打印响应的正文。
基本上奇怪的是,当我 运行 使用 node 时,代码打印响应,而当我 运行 使用 mocha 时,它没有,这让我认为请求的回调未被调用...
我需要将测试函数作为回调传递给此函数以便处理响应。
为什么没有打印响应?为什么没有调用回调?有没有更好的方法来测试这种功能?
在此先致谢。
您可以在 describe
块中执行类似的操作。所有 mocha 挂钩函数都有一个 done
回调,可用于驯服异步调用并在进行断言之前设置您的环境
// 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()
});
});
风格是你选择的问题
我有一个功能可以使用 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;
}
});
}
我的问题是,当我在命令行上 运行 这段代码时,它工作正常,但是,我正在尝试使用 mocha 为此创建一个测试。
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 在命令行上调用这个测试时,它不仅通过了,而且也没有打印响应的正文。
基本上奇怪的是,当我 运行 使用 node 时,代码打印响应,而当我 运行 使用 mocha 时,它没有,这让我认为请求的回调未被调用...
我需要将测试函数作为回调传递给此函数以便处理响应。
为什么没有打印响应?为什么没有调用回调?有没有更好的方法来测试这种功能?
在此先致谢。
您可以在 describe
块中执行类似的操作。所有 mocha 挂钩函数都有一个 done
回调,可用于驯服异步调用并在进行断言之前设置您的环境
// 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()
});
});
风格是你选择的问题