【发布时间】:2018-09-12 07:19:00
【问题描述】:
我的问题是关于在 Node.js 中使用 Promise 和事件发射器进行单元测试。如果这很重要,我正在使用 jasmine 框架。
以下代码使用 Node.js 的 https 模块向 API 发送请求。 API 将返回 JSON。 API 中的 JSON 是下面代码中的“rawData”变量。
我想对函数返回 JSON(而不是 JavaScript 对象)进行单元测试。
我尝试了几种方法对该功能的该方面进行单元测试,但均未成功:
1) 我尝试监视 Promise 构造函数,以便它返回一个假函数,该函数只会返回一个 JSON 字符串。
2) 我尝试监视 Node.js 中 EventEmitters 的 .on('eventType', callback) 函数来伪造一个返回 JSON 的函数。
我的问题是:上述两种方法中的任何一种都可能和/或推荐用于实现我的目标吗?是否有不同的方法可以从我的单元测试目标中隔离 http 请求和事件的发射?我是否需要重写此函数以方便单元测试?
const https = require('https');
function getJSON() {
return new Promise((resolve, reject) => {
const request = https.get(someConfig);
request.on('response', resolve);
})
.then(msg => {
return new Promise((resolve, reject) => {
let rawData = '';
msg.on('data', chunk => { rawData += chunk });
msg.on('end', () => {
resolve(rawData);
});
});
})
.then(json => {
JSON.parse(json);
return json;
})
}
【问题讨论】:
-
你看过像 nock 这样的库来模拟 http 请求吗? github.com/node-nock/nock
标签: javascript node.js unit-testing promise eventemitter