Jasmine Angular Mock 组件属性
正在运行命令:
ng test --codeCoverage=true --progress=false --watch=false
错误消息:
TypeError: Cannot read property 'substring' of undefined
组件的 NgOnInit
private serv: ExtratosMensaisService,
ngOnInit(): void {
const serventia: Serventia = this.serv.getServentiaSelecionada();
const competencia: Competencia = this.serv.getCompetenciaSelecionada();
const titularidade = serventia.titularidade.substring(0, 1).toUpperCase();
}
服务文件方法:
getServentiaSelecionada(): Serventia {
return JSON.parse(sessionStorage.getItem('serventia'));
}
我知道该属性未定义,但我无法使其“定义”。 我已经尝试使用 jasmine.createSpyObj() 中的第三个数组来监视属性,但错误仍然存​​在。 并尝试在 mockExtratosMensaisService returnValue(of({ object })) 上传递一个 JSON 对象,并尝试这样做:
mockExtratosMensaisService.getServentiaSelecionada.and.returnValue(of({ titularidade: 123 }));
我使用的方法是否错误?我需要这个测试通过。
spec.component 文件:
describe('PrestacaoContasTitularComponent', () => {
let component: PrestacaoContasTitularComponent;
let fixture: ComponentFixture<PrestacaoContasTitularComponent>;
const mockExtratosMensaisService = jasmine.createSpyObj('Obj',
['getServentiaSelecionada', 'getCompetenciaSelecionada'],
['titularidade']);
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ RouterTestingModule, HttpClientTestingModule ],
declarations: [ PrestacaoContasTitularComponent ],
providers: [ MatDialog, Overlay, MatSnackBar,
{ provide: ActivatedRoute, useValue: {} },
{ provide: InjectionToken, useValue: {} },
{ provide: MAT_DIALOG_SCROLL_STRATEGY, useValue: {} },
{ provide: ExtratosMensaisService, useValue: mockExtratosMensaisService }
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PrestacaoContasTitularComponent);
component = fixture.componentInstance;
mockExtratosMensaisService.getServentiaSelecionada.and.returnValue(of({ titularidade: 123 }));
mockExtratosMensaisService.getCompetenciaSelecionada.and.returnValue(of({ data: 'competencia' }));
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
尝试将模拟更改为:
const mockExtratosMensaisService = jasmine.createSpyObj('Obj', ['getServentiaSelecionada', 'getCompetenciaSelecionada']);
然后执行
mockExtratosMensaisService.getServentiaSelecionada.and.returnValue({ titularidade: 'abc' });.
我将 123 更改为“abc”,因为我不确定子字符串是否适用于数字。之前,您仍然返回,这是不正确的,因为它不是可观察对象,而是常规 JavaScript 对象。
您的方法:
mockextratosmensaisservice.getServentiaSelecionada.and.ReturnValue(of({tiTularIdade:123}));
非常好。
但是您需要一个可以调用
.and.returnvalue()
的间谍对象
为此,您可以喜欢:
spyon(mockextratosmensaisservice,'getserventiaselectionda')和。returnvalue(of({{tiTularIdade:123}))
这应该是一种方法去。