首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Jest单元测试在运行函数的中间检查预期的日志?

如何使用Jest单元测试在运行函数的中间检查预期的日志?
EN

Stack Overflow用户
提问于 2020-06-04 07:24:58
回答 1查看 101关注 0票数 1

我有一个演示功能:

代码语言:javascript
运行
复制
export async function myHandler(
    param1: string,
    param2: string,
    req: Request,
    next: NextFunction,

) {
    const log = req.log.prefix(`[my=prefix]`);
    let res;
    If (param1 === 'param1') {
        log("GOT PARAM 1");
    } else {
        res = await doSomething();
    }
    log("GOT HERE");
    ..
    ..
    ..
    ..
    res.setReturnStatus(200)
    }
    next();
}

对于记录器,这是包含它的请求:

代码语言:javascript
运行
复制
 const req: {
url: string;
params: {};
body: {
    device: {
        type: string;
        p1: string;
        p2: string;
        p3: string;
    };
    data: {
        sample: number;
    };
};
metric: () => jest.Mock<any, any>;
log: {
    (): jest.Mock<any, any>;
    warn(): jest.Mock<...>;
    error(): jest.Mock<...>;
    prefix(): jest.Mock<...>;
};
timing: () => jest.Mock<...>;

}

当我编写单元测试时,我的行是检查返回状态:expect(res.status).toBeCalledWith(200);

我想涵盖第一个'if‘语句,其中的日志’获得PARAM 1‘,但不知道如何拦截我的电话在中间。

代码语言:javascript
运行
复制
doSomething = jest.fn(() => Promise.resolve());
await myHandler('param1', 'param1', next); //HERE to check somehow that also was log ?
expect(res.status).toBeCalledWith(200);

试图做这样的事情:

代码语言:javascript
运行
复制
const spy = jest.spyOn(req.log, 'log');

得到了错误:

代码语言:javascript
运行
复制
Cannot spy the log property because it is not a function; undefined given instead
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-04 09:46:58

由于log起源于req,所以应该通过它传递模拟的实现:

代码语言:javascript
运行
复制
let mockLog = jest.fn();
let mockReq = { log: { prefix: jest.fn().mockReturnValue(mockLog) } };
await myHandler('param1', 'param1', mockReq, next);
expect(mockReq.log.prefix).toBeCalledWith(...);
expect(mockLog).toBeCalledWith(...);

这一尝试失败是因为它是req.log.prefix,而不是req.log.log

代码语言:javascript
运行
复制
const spy = jest.spyOn(req.log, 'log');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62189004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档