首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jasmine进行代码覆盖的单元测试

使用jasmine进行代码覆盖的单元测试
EN

Stack Overflow用户
提问于 2021-06-28 21:18:56
回答 1查看 46关注 0票数 0

我有一个简单记录器.ts文件.I正在尝试在.If上做单元测试有人帮我修复我的单元测试。

logging.service.ts

代码语言:javascript
复制
import 'reflect-metadata'; // Required for tsyringe
import { singleton } from 'tsyringe';
import { Category } from 'typescript-logging';
@singleton()
export class Logger {
private logger: Category;
constructor(){
this.logger = new Category('oidc-security-logger');
}
trace(msg: string): void {
this.logger.trace(msg);
}
debug(msg: string): void {
this.logger.debug(msg);
}
info(msg: string): void {
this.logger.info(msg);
}
warn(msg: string): void {
this.logger.warn(msg);
}
error(msg: string, error?: Error): void {
if(error){
 this.logger.error(msg, error);
 } else {
 this.logger.error(msg, null);
 }
 }
 fatal(msg: string, error?: Error): void {
 if (error) {
   this.logger.fatal(msg, error);
 } else {
      this.logger.fatal(msg, null);
   }
  }
 }

我尝试了以下方法来完成我的单元测试。logging.service.spec.ts

代码语言:javascript
复制
import { Logger } from "./logging.service";    

describe("Logger", () => {    
let loggerMok: Logger;    
beforeEach(() => {
 loggerMok = new Logger();
});

it("should be test logger", () => {
const msg='This is for test';
spyOn(loggerMok,'trace').and.stub();
spyOn(loggerMok,'debug').and.stub();
spyOn(loggerMok,'info').and.stub();
spyOn(loggerMok,'warn').and.stub();
spyOn(loggerMok,'error').and.stub();
spyOn(loggerMok,'fatal').and.stub();
loggerMok.trace(msg);
loggerMok.debug(msg);
loggerMok.info(msg);
loggerMok.warn(msg);
loggerMok.error(msg);
loggerMok.fatal(msg);
expect(loggerMok.trace).toHaveBeenCalled();
expect(loggerMok.debug).toHaveBeenCalled();
expect(loggerMok.info).toHaveBeenCalled();
expect(loggerMok.warn).toHaveBeenCalled();
expect(loggerMok.error).toHaveBeenCalled();
expect(loggerMok.fatal).toHaveBeenCalled();

});
});

这个单元测试运行良好,但是代码覆盖率没有给出分数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-29 11:38:11

您应该使用callThrough而不是stub。当你使用stub时,它不会调用实际的实现,基本上只是忽略调用。有关更多信息,请查看Method stubs

当您使用callThrough时,它将调用实际的实现,从而增加覆盖率。所以你可以使用类似这样的东西:

代码语言:javascript
复制
it("should be test logger", () => {
const msg='This is for test';
spyOn(loggerMok,'trace').and.callThrough();
spyOn(loggerMok,'debug').and.callThrough();
spyOn(loggerMok,'info').and.callThrough();
spyOn(loggerMok,'warn').and.callThrough();
spyOn(loggerMok,'error').and.callThrough();
spyOn(loggerMok,'fatal').and.callThrough();
loggerMok.trace(msg);
loggerMok.debug(msg);
loggerMok.info(msg);
loggerMok.warn(msg);
loggerMok.error(msg);
loggerMok.fatal(msg);
expect(loggerMok.trace).toHaveBeenCalled();
expect(loggerMok.debug).toHaveBeenCalled();
expect(loggerMok.info).toHaveBeenCalled();
expect(loggerMok.warn).toHaveBeenCalled();
expect(loggerMok.error).toHaveBeenCalled();
expect(loggerMok.fatal).toHaveBeenCalled();

});
});

但是这个测试用例不是很有用,因为您所要做的就是调用它,然后检查它是否被调用。相反,我建议在new Category上进行间谍活动,并检查是否调用了它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68164081

复制
相关文章

相似问题

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