node.js - 在 Jest Node.js 测试中从响应中检索 JSON
问题描述
我正在用 Jest 测试一个 Node/Express 应用程序。我从这个 Jest 测试中得到了 200 个代码,但没有得到 JSON 响应。
import * as httpMocks from 'node-mocks-http';
import * as ctrlCars from '../src/controllers/cars';
describe('Test Cars', () => {
it('should GET car by ID', () => {
const request = httpMocks.createRequest({
method: 'GET',
url: '/cars',
params: {
id: 2
}
});
const response = httpMocks.createResponse();
const next = function(err) {
console.log('resultNext: ', response._getData());
};
ctrlReels.getCar(request, response, next);
// TODO
console.log('result: ', response.statusCode);
console.log('result: ', response.statusMessage);
console.log('resultData: ', response._getData());
});
});
我在网上找到的示例使用 ._getData() 获取数据,然后将其解析为 JSON,但在我的测试中,resultData 没有返回任何内容,并且根本不输出 resultNext。
解决方案
经过多次谷歌搜索,我找到了答案,所以我将为下一个找到它的人回答我自己的问题(https://github.com/howardabrams/node-mocks-http/issues/73)。在我的案例中实际上有两个问题。
我没有在运行测试的同一终端中导出我的开发环境变量。我的 Node 应用程序无法连接到我的数据库,因为我没有导出用户和密码。这被第二个问题隐藏了。
我需要将 EventEmitter 添加到测试中以捕获“发送”事件,然后显示该数据。
从'node-mocks-http'导入*作为httpMocks;
从'../src/controllers/cars'导入*作为ctrlReels;
从“事件”导入 { EventEmitter };
describe('Test Cars', () => { it('should GET car', done => { const request = httpMocks.createRequest({ method: 'GET', url: '/cars', params: { id: 2 } }); const response = httpMocks.createResponse({eventEmitter: EventEmitter}); const next = function(err) { console.error('Test error: ', err); };
ctrlReels.getCar(request, response, next); response.on('end', () => { console.log('end'); console.log(response._getData()); done(); }); response.on('send', () => { console.log('send'); console.log(response._getData()); done(); });
}); });
此示例输出数据两次。一次用于发送事件,一次用于结束事件。
注意:我不知道代码格式发生了什么。我试过了……我真的试过了。
推荐阅读
- javascript - jQuery $.load 未执行
- node.js - webpack-cil TypeError:compiler.plugin 不是函数
- javascript - 如何调试从浏览器开始就冻结的 Google Chrome 中的选项卡?
- r - 错误:运行 HMM 时替换的长度为零 R
- python - 单击opencv上的白色块
- java - RestEasy 与 Jakarta RESTfull Web 服务不兼容
- flutter - 在 bloc 测试中,当在 bloc 内部使用 decodeImageFromList 时,add 事件不起作用
- python - 使用 desktop.ini 更改文件夹图标的问题
- c# - 从 API 端点访问通用对象
- amazon-web-services - EKS 集群终端节点访问