apa*_*gav 3 jasmine karma-runner
我正在尝试为以下方法编写测试用例:-
subscriptionPackages() {
this.managePackageService.getPackages().subscribe(
(response) => {
this.packagePlan = response;
},
(httpErrorRes) => {
}
);
}
Run Code Online (Sandbox Code Playgroud)
我已在我的 spec.ts 文件中尝试使用以下代码片段来覆盖上述代码:-
fdescribe('AddProductComponent', () => {
let component: AddProductComponent;
let fixture: ComponentFixture<AddProductComponent>;
let packageServiceStub = jasmine.createSpyObj('ManagePackageService', ['getPackages']);
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [HttpClientTestingModule,ReactiveFormsModule,FormsModule,ToastrModule.forRoot(),
TranslateModule.forRoot(), NgSelectModule],
declarations: [ AddProductComponent ],
providers :[AppConfig,
{ provide: ManagePackageService, useValue: packageServiceStub }]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(AddProductComponent);
component = fixture.componentInstance;
component.packagePlan = [{'name':'basic', 'id':1}, {'name':'advance', 'id':2}, {'name':'premium', 'id':3}];
fixture.detectChanges();
});
it('should create subscriptionPackages', () => {
const mockpackageResponse = [];
packageServiceStub.getPackages.and.returnValue(of(mockpackageResponse));
component.subscriptionPackages();
expect(component.packagePlan).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)
从这段代码中,我的测试用例已被覆盖,但我收到以下错误:-
您调用subscriptionPackages组件的ngOnInit或 吗? constructor
如果您在 中调用它ngOnInit,则需要在returnValue第一个 之前模拟fixture.detectChanges()。第一个fixture.detectChanges()是何时ngOnInit被调用。
beforeEach(() => {
fixture = TestBed.createComponent(AddProductComponent);
component = fixture.componentInstance;
// !! Move this line here if calling subscriptionPackages in ngOnInit !!
packageServiceStub.getPackages.and.returnValue(of(mockpackageResponse));
component.packagePlan = [{'name':'basic', 'id':1}, {'name':'advance', 'id':2}, {'name':'premium', 'id':3}];
fixture.detectChanges();
});
it('should create subscriptionPackages', () => {
const mockpackageResponse = [];
component.subscriptionPackages();
expect(component.packagePlan).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)
beforeEach(() => {
// !! Move this line here if calling subscriptionPackages in constructor !!
packageServiceStub.getPackages.and.returnValue(of(mockpackageResponse));
fixture = TestBed.createComponent(AddProductComponent);
component = fixture.componentInstance;
component.packagePlan = [{'name':'basic', 'id':1}, {'name':'advance', 'id':2}, {'name':'premium', 'id':3}];
fixture.detectChanges();
});
it('should create subscriptionPackages', () => {
const mockpackageResponse = [];
component.subscriptionPackages();
expect(component.packagePlan).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)