Javascript 如何开玩笑地模仿记录器

Javascript 如何开玩笑地模仿记录器,javascript,typescript,unit-testing,mocking,jestjs,Javascript,Typescript,Unit Testing,Mocking,Jestjs,我该如何嘲笑Logger方法/实例?我确实尝试了在线资源,但找不到任何有效的。有人能帮我吗?只要模仿记录器方法就足够了。我可以模仿其他代码。因此,我无法测试错误条件 import rp from "request-promise-native"; import BookLogger from "Book-logger"; const logger = BookLogger.getLogger('Book-service', BookLogger.LOG_LEVEL.INFO); export

我该如何嘲笑Logger方法/实例?我确实尝试了在线资源,但找不到任何有效的。有人能帮我吗?只要模仿记录器方法就足够了。我可以模仿其他代码。因此,我无法测试错误条件

import rp from "request-promise-native";
import BookLogger from "Book-logger";
const logger = BookLogger.getLogger('Book-service', BookLogger.LOG_LEVEL.INFO);

export class BookService {

@param bookCategory id of book category
@param boooks list of books

public static async getAllBookInCategory(bookCategory: string) {

        try {
            const neededInfo = {
                url: `https://${process.env.BOOK_HOST}/bookapi/${process.env.BOOKAPI_VERSION}/iterative/bookCategory/${ bookCategory }/books/all `,
                method: 'GET',
            }

            const result = await BookService.makeRequest(bookCategory, neededInfo);

            return await rp(result);
        } catch(error) {
            logger.error(`Failed to get All Books in given category ${error}`)
        }
}
以下是解决方案:

main.ts

从“/Book logger”导入BookLogger;
const logger=BookLogger.getLogger('Book-service',BookLogger.LOG\u LEVEL.INFO);
导出函数main(){
const error=新错误(“内部服务器错误”);
logger.error(`未能获取给定类别${error}`中的所有书籍);
}
Book logger.ts

导出默认类BookLogger{
公共静态日志\u级别={
信息:“信息”,
};
公共静态getLogger(名称、级别){
返回{
错误:(消息)=>{
控制台错误(消息);
},
};
}
}
main.test.ts

从“/main”导入{main};
从“/Book logger”导入BookLogger;
jest.mock('./Book logger.ts',()=>{
常数mLogger={
错误:jest.fn(),
};
返回{
日志级别:require.requirection('./Book logger.ts')。default.LOG\u级别,
getLogger:jest.fn(()=>mLogger),
};
});
描述('main',()=>{
之后(()=>{
jest.resetAllMocks();
});
它('应该正确模拟记录器',()=>{
const logger=BookLogger.getLogger('Book-service',BookLogger.LOG\u LEVEL.INFO);
main();
expect(jest.isMockFunction(logger.error)).toBeTruthy();
const error=新错误(“内部服务器错误”);
expect(logger.error).toBeCalledWith(`Failed to get All Books in给定类别${error}`);
});
});
单元测试结果和覆盖率报告:

通过src/stackoverflow/59366107/main.test.ts
主要的
✓ 模拟记录器是否正确(4ms)
----------------|----------|----------|----------|----------|-------------------|
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s|
----------------|----------|----------|----------|----------|-------------------|
所有文件| 83.33 | 100 | 50 | 81.82 ||
Book-logger.ts | 71.43 | 100 | 33.33 | 66.67 | 6,8|
main.ts | 100 | 100 | 100 | 100 ||
----------------|----------|----------|----------|----------|-------------------|
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:4.562s,估计11s

源代码:

如何使用'@nestjs/common'记录器(尽管它使用自定义日志)function@nnfans你能问一个新问题吗?