class MyClassComponent {
hasAccess = this.hasAccessToSomething();
constructor(private numberService: NumberService) {}
private hasAccessToSomething(): boolean {
return this.numberService.getNumber() > 5;
}
}
我應該測驗是否hasAccess等于false或true依賴于該numberService.getNumber()值?這是一個初始類狀態,我呼叫了一個私有方法,一個不應該被測驗的方法,并將它的值分配給我的公共類成員。
如果答案是肯定的 - 如何使用 jasmine/jest 和 TestBed 來做到這一點?
let component: MyClassComponent;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
MyClassComponent,
NumberService
]
});
component = TestBed.inject(MyClassComponent);
});
我可以模擬NumberService.getNumber方法,但問題是在創建模擬之后,我無法重新初始化hasAccess分配。我可以呼叫this.hasAccessToSomething例如ngOnInit,然后hasAccess再次呼叫測驗值,ngOnInit但我不想讓類復雜化以進行測驗。有了這樣簡單的類,我可以擺脫TestBed并重新初始化組件,new MyClassComponent但讓我們想象這個類更大,依賴更多。
你會怎么做?
uj5u.com熱心網友回復:
您可以將jasmine.Spy其用于此目的并變成hasAccessgetter 屬性:
export class MyClassComponent {
public get hasAccess(): boolean {
return this.hasAccessToSomething()
}
...
在您的測驗中:
describe('MyClassComponent', () => {
beforeEach(async () => {
TestBed.configureTestingModule({
providers: [
MyClassComponent,
NumberService
]
});
...
})
it('should have access if numberService.getNumber() returns more than 5', () => {
spyOn(TestBed.inject(NumberService), 'getNumber').and.returnValue(6)
expect(component.hasAccess).toBeTrue()
})
it('should not have access if numberService.getNumber() returns less than 5', () => {
spyOn(TestBed.inject(NumberService), 'getNumber').and.returnValue(4)
expect(component.hasAccess).toBeFalse()
})
})
如果您不想變成hasAccess一個getter屬性,那么您應該在使用嵌套描述塊模擬/監視服務之前確定組件的創建范圍:
describe('MyComponent...', () => {
beforeEach(() => /*build the module*/)
describe('when NumberService.getNumber returns more than 5', () => {
beforeEach(() => {
spyOn(TestBed.inject(NumberService), 'getNumber').and.returnValue(6)
component = ...
})
it('should have access', () => expect(component.hasAccess).toBeTrue())
})
// Symmetric for less than 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/421937.html
標籤:
