在 TestBed 中创建 angular 组件时,如何覆盖 jasmine 中 ngOnInit 中的函数?
How to override a function inside ngOnInit in jasmine when creating an angular component in TestBed?
我有一个 ngOnInit 函数在同一个组件中调用另一个函数,我正在使用 jasmine 测试测试这个组件。
我想模拟 ngOnInit 函数内部的函数,以防止执行原始实现。
ngOnInit(): void {
this.initializeData();
}
我在每个函数之前尝试了以下实现,但这样 ngOninit 将执行两次:
beforeEach(() => {
testHostFixture = TestBed.createComponent(TestHostComponent);
testHostComponent = testHostFixture.componentInstance;
spyOn(testHostComponent, 'initializeData').and.callFake(()=>{console.log("replacement");});
testHostComponent.ngOnInit();
testHostFixture.detectChanges();
});
有没有办法在 ngOnInit 第一次执行之前模拟函数 'initializeData' 的实现?
谢谢。
在创建组件之前您需要监视。所以只需将间谍移动到创建线上方即可。
beforeEach(() => {
spyOn(testHostComponent, 'initializeData').and.callFake(()=>
{console.log("replacement");});
testHostFixture = TestBed.createComponent(TestHostComponent);
testHostComponent = testHostFixture.componentInstance;
testHostComponent.ngOnInit();
testHostFixture.detectChanges();
});
您的 ngOnInit()
在 TestBed
中创建时,组件运行 ngOnInit()
时将在此处被调用两次。如果你只希望它被调用一次。删除显式调用 testHostComponent.ngOnInit();
我有一个 ngOnInit 函数在同一个组件中调用另一个函数,我正在使用 jasmine 测试测试这个组件。
我想模拟 ngOnInit 函数内部的函数,以防止执行原始实现。
ngOnInit(): void {
this.initializeData();
}
我在每个函数之前尝试了以下实现,但这样 ngOninit 将执行两次:
beforeEach(() => {
testHostFixture = TestBed.createComponent(TestHostComponent);
testHostComponent = testHostFixture.componentInstance;
spyOn(testHostComponent, 'initializeData').and.callFake(()=>{console.log("replacement");});
testHostComponent.ngOnInit();
testHostFixture.detectChanges();
});
有没有办法在 ngOnInit 第一次执行之前模拟函数 'initializeData' 的实现?
谢谢。
在创建组件之前您需要监视。所以只需将间谍移动到创建线上方即可。
beforeEach(() => {
spyOn(testHostComponent, 'initializeData').and.callFake(()=>
{console.log("replacement");});
testHostFixture = TestBed.createComponent(TestHostComponent);
testHostComponent = testHostFixture.componentInstance;
testHostComponent.ngOnInit();
testHostFixture.detectChanges();
});
您的 ngOnInit()
在 TestBed
中创建时,组件运行 ngOnInit()
时将在此处被调用两次。如果你只希望它被调用一次。删除显式调用 testHostComponent.ngOnInit();