【问题标题】:retrieving JSON from Response in Jest Node.js test在 Jest Node.js 测试中从响应中检索 JSON
【发布时间】:2019-01-08 18:30:11
【问题描述】:

我正在使用 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 根本不输出。

【问题讨论】:

  • @DavidR 你的意思是在测试范围之外?是的,我使用 Postman,我知道这条路线正在运行

标签: node.js typescript jestjs


【解决方案1】:

经过多次谷歌搜索,我找到了答案,所以我将为找到它的下一个人回答我自己的问题 (https://github.com/howardabrams/node-mocks-http/issues/73)。我的情况实际上有两个问题。

  1. 我没有在运行测试的同一终端中导出我的开发环境变量。我的 Node 应用程序无法连接到我的数据库,因为我没有导出用户和密码。这被第二个问题隐藏了。

  2. 我需要将 EventEmitter 添加到测试中以捕获“发送”事件,然后显示该数据。

    从 'node-mocks-http' 导入 * 作为 httpMocks;

    从 '../src/controllers/cars' 导入 * as ctrlReels;

    从“事件”导入 { EventEmitter };

    describe('测试车', () => { 它('应该得到汽车',完成 => { 常量请求 = httpMocks.createRequest({ 方法:'GET', 网址:'/汽车', 参数:{ 编号:2 } }); 常量响应 = httpMocks.createResponse({eventEmitter: EventEmitter}); 常量下一个 = 函数(错误){ console.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();
    });
    

    }); });

这个例子输出了两次数据。一次用于发送事件,一次用于结束事件。

注意:我不知道代码格式是怎么回事。我试过了……我真的试过了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-28
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2020-06-18
    • 2021-11-02
    相关资源
    最近更新 更多