我正在用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。
答案 0 :(得分:0)
经过大量的搜索,我找到了答案,所以我将为下一个找到它的人(https://github.com/howardabrams/node-mocks-http/issues/73)回答我自己的问题。我的情况实际上有两个问题。
我没有在运行测试的同一终端中导出我的dev环境变量。我的Node应用程序无法连接到我的数据库,因为我没有导出用户名和密码。第二个问题掩盖了这一点。
我需要在测试中添加EventEmitter来捕获“发送”事件,然后显示该数据。
从'node-mocks-http'导入*作为httpMocks;
从'../src/controllers/cars'中将*作为ctrlReels导入;
从“事件”中导入{EventEmitter};
describe('Test Cars',()=> { 它(“应该送车”,完成=> { const request = httpMocks.createRequest({ 方法:“ GET”, 网址:“ / cars”, 参数:{ 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();
});
}); });
此示例输出两次数据。一次用于发送事件,一次用于结束事件。
注意:我不知道代码格式是怎么回事。我尝试过...我确实做到了。