angular - Angular 2 单元测试在它应该失败时总是通过
问题描述
我正在测试一个服务,它的构造函数中有一个名为 checkName() 的方法。出于某种原因,当我尝试测试 checkName() 方法时,它总是成功的,即使测试应该失败。但是,如果我在构造函数中注释掉该方法,则测试的行为应该会失败。
这是我对 Service1 的测试:
describe('Service: Service1', () => {
let service1: Service1;
let service2: Service2;
beforeEach(() => {
routerStub = {
navigate: jasmine.createSpy('navigate')
};
TestBed.configureTestingModule({
providers: [
Service1,
{provide: Service2, useValue: Service2Stub},
{provide: Router, useValue: routerStub}
]
});
service1 = TestBed.get(Service1);
service2 = TestBed.get(Service2);
});
it('should fail', () => {
spyOn(service2, 'getName').and.returnValue('test');
service1.checkName();
expect(routerStub.navigate).toHaveBeenCalledWith(['bad-name-page']);
});
这是服务1:
export class Service1 {
constructor(private _service2: Service2) {
this.checkName();
}
checkName(): void {
const name = this._service2.getName();
if (!name) {
this._router.navigate(['bad-name-page']);
}
}
}
通过从 spyOn(service2, 'getName') 返回“test”,我希望测试失败,因为它应该只在名称未定义时导航到 bad-name-page。我在“if”语句之前和之后添加了日志记录,一切看起来都很正常;name 填充有“test”,当该名称有效时,if 语句中的日志不会执行。
但是,如果我从构造函数中删除 this.checkName(),这个测试会像我预期的那样失败。
为什么在构造函数中有 this.checkName() 会导致我的测试出现问题,使用构造函数方法编写测试的最佳方法是什么?
谢谢!
解决方案
推荐阅读
- ubuntu - Apache2 不想启动
- sabre - Sabre SOAP CreatePassengerNameRecordRQ NEED 5 错误
- python - 当去 http://localhost@admin 时,它会显示 python 的实际脚本
- java - 类加载器:委托层次结构算法
- docker - 如何通过 LLVM build_docker_image.sh 默认使用 libc++ 构建 clang?
- r - 格兰奇 - (左)加入
- python - 尝试将 y 变量读入 pyplot.scatter 时出现 IndexError
- android - 是否可以存档当前的商品列表重新上传 apk 到新的商品列表
- csv - Spark:没有输入文件名
- arrays - 将下采样图像映射到原始分辨率 - MATLAB