【发布时间】:2020-09-15 18:45:10
【问题描述】:
我是 Jasmine 的新手。我正在编写一个 UT 来检查是否在 ngAfterViewInit 函数中调用了服务。
下面是我的测试代码
describe('HomePage', () => {
let component: HomePage;
let fixture: ComponentFixture<HomePage>;
let service:DataloadService;
let srvSpy:any;
let compoSpy:any;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ HomePage ],
imports: [
HttpClientTestingModule,
IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(HomePage);
component = fixture.componentInstance;
}));
it('getData method should be called on Init',()=>{
srvSpy=jasmine.createSpy('getData').and.callThrough();
expect(srvSpy).not.toHaveBeenCalled();
component.ngAfterViewInit();
expect(srvSpy).toHaveBeenCalledTimes(1);
});
});
每次我运行脚本时,测试都会失败并给出错误提示
预计间谍已被调用一次。它被调用了 0 次
我应该如何解决这个问题?
更新:
import { Component, OnInit, AfterViewInit } from '@angular/core';
import { from } from 'rxjs';
import {DataloadService} from '../services/dataload.service';
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
})
export class HomePage implements AfterViewInit {
value:any;
constructor(private srv:DataloadService) {}
ngAfterViewInit(){
this.srv.getData().subscribe(
res=>{
this.value=res;
console.log(this.value);
}
)
}
}
【问题讨论】:
-
让我们看看你的
ngAfterViewInit代码。乍一看,您似乎没有正确地进行间谍活动。 -
我已经用 ngAfterViewInit 更新了我的代码
-
先做fixture.detectChanges()再做fixture.whenStable,里面有你的期望。
标签: angular unit-testing jasmine karma-jasmine karma-runner