gpt4 book ai didi

javascript - Jest Spy 说函数没有被调用

转载 作者:行者123 更新时间:2023-11-30 13:57:17 25 4
gpt4 key购买 nike

函数 sendResponse 被调用,我可以判断是因为 sendResponse 中的 console.log 行被执行了。但是,我的 spy 说 sendResponse 方法没有被调用。只是想知道我在这里做错了什么。

import * as ExpressHelpers from './express-helper';

describe('sendResponse', () => {
it('sends a 500 error response', () => {
const sendResponseSpy = spyOn(ExpressHelpers, 'sendResponse');
const mockResponse = () => {
const res: any = {};
res.status = jest.fn().mockReturnValue(res);
res.send = jest.fn().mockReturnValue(res);
return res;
};
const errorMsg = 'Server error msg';
const res = mockResponse();
ExpressHelpers.sendServerError(errorMsg, res);
expect(sendResponseSpy).toHaveBeenCalled();
});
});
export function sendResponse(statusCode: HttpStatus, message: string, data: {}, response: Express.Response) {
const responseEntity: ResponseEntity = {
message,
statusCode,
data,
};
response.send(responseEntity);
}

export function sendServerError(serverErrorMsg: string, res: Express.Response) {
sendResponse(HttpStatus.SERVER_ERROR, serverErrorMsg, null, res);
}

错误:

  ● Express Helper › sendResponse › sends a 500 error response

expect(spy).toHaveBeenCalled()

Expected spy to have been called, but it was not called.

35 | const res = mockResponse();
36 | ExpressHelpers.sendServerError(errorMsg, res);
> 37 | expect(sendResponseSpy).toHaveBeenCalled();
| ^
38 | });
39 | });
40 | });

at Object.it (src/helpers/express-helper.test.ts:37:37)

最佳答案

Jest 本身并不在 ES 模块上运行,您的代码会被 Babel 或 TSC 转译,然后加载并执行。这种转换的结果是您导出的函数引用现在绑定(bind)到“导出”对象,该对象在您的源代码中不可见,但存在于正在运行的代码中。

当调用 spyOn 时,'exports' (exports.sendResponse) 对象内的引用被监视,但不是函数调用 (sendResponse) 内的引用。一种解决方案是像这样将所有函数绑定(bind)到某个导出的对象

function foo() { namespace.bar() }
function bar() {}

const namespace = {
foo,
bar
}
export default namespace;

如果这感觉像是 hack,您可以使用带有静态方法的类来达到几乎相同的效果。 jest 似乎不会在最近的将来获得 ESM 支持 ( https://github.com/facebook/jest/issues/4842 ),因此这将是更简单的解决方案之一。

关于javascript - Jest Spy 说函数没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57005210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com