有没有一种方法可以模拟请求对象上的属性

时间:2019-08-20 21:55:17

标签: javascript mocking jestjs

我有使用swagger定义的Javascript REST api端点。在我的控制器中,我正在记录传入请求中的IP地址。

这工作得很好,但是现在我试图添加Jest测试以进行覆盖,并且每次运行测试时都会抛出错误

module.exports.execute = async function execute (req, res) {
    try {
        log.info("Start processing request from client IP="+req.connection.remoteAddress);
        ... do some stuff
        log.info("Finished processing request from client IP="+req.connection.remoteAddress);
    } catch(err) {
        log.error("Error caught in Address controller =>" + err.message);
        utils.writeJson(res, err.message, 500);
    }
};

执行测试时,我在控制器中陷入错误=>无法读取未定义的属性'remoteAddress'

当我注释掉调用req.connection.remoteAddress的行时,一切都很好,我得到了覆盖,但不适用于这两行。

我猜问题是req.connection.remoteAddress是属性而不是函数。

有没有一种方法可以模拟此调用的响应以返回像1.1.1.1这样的状态字符串?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

在考虑@Will Alexander的第一条评论中的问题后,我添加了此内容(第二行),现在一切都很好。谢谢威尔

let mockReq = _.set({},'swagger.params.entity.value', JSON.stringify({            fail: false}));
mockReq.connection = _.set({},'remoteAddress', '1.1.1.1');