Angular 中的单元测试 - 属性 值未更新
Unit testing in Angular - property value not updating
我有一个简单的功能,可以在点击事件时显示和隐藏下拉菜单。这是HTML代码
<div (click)="toggleDropdown()" id="game-category">Show/Hide menu</div>
<div class="relative">
<app-category *ngIf="isShown" [filtersList]="categories">
</app-category>
</div>
该函数设置一个与组件的 属性 值相反的值。
isShown = false;
toggleDropdown(): void {
this.isShown = !this.isShown;
}
一切正常,但是当我 运行 测试时,我得到了一个错误。这是测试代码:
describe('CreateGameComponent', () => {
let component: CreateGameComponent;
let fixture: ComponentFixture<CreateGameComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [
CommonModule,
],
declarations: [CreateGameComponent],
providers: [RequestService, SessionService, AdminService],
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(CreateGameComponent);
component = fixture.componentInstance;
component.isShown = false;
fixture.detectChanges();
});
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should check if toggleDropdownwas called', fakeAsync(() => {
spyOn(component, 'toggleDropdown');
let button =
fixture.debugElement.nativeElement.querySelector('#game-category');
button.click();
tick();
fixture.detectChanges();
expect(component.toggleDropdown).toHaveBeenCalled();
expect(component.isShown).toBe(true, 'isShown has not changed');
}));
})
触发点击事件后 isShown
属性 没有改变它的值。
任何帮助表示赞赏。谢谢!
当你做spyOn(component, 'toggleDropdown');
时,它模拟方法,它的内容变为空,不再执行。你必须添加spyOn(component, 'toggleDropdown').and.callThrough()
,所以该方法实际上被调用了。
我有一个简单的功能,可以在点击事件时显示和隐藏下拉菜单。这是HTML代码
<div (click)="toggleDropdown()" id="game-category">Show/Hide menu</div>
<div class="relative">
<app-category *ngIf="isShown" [filtersList]="categories">
</app-category>
</div>
该函数设置一个与组件的 属性 值相反的值。
isShown = false;
toggleDropdown(): void {
this.isShown = !this.isShown;
}
一切正常,但是当我 运行 测试时,我得到了一个错误。这是测试代码:
describe('CreateGameComponent', () => {
let component: CreateGameComponent;
let fixture: ComponentFixture<CreateGameComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [
CommonModule,
],
declarations: [CreateGameComponent],
providers: [RequestService, SessionService, AdminService],
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(CreateGameComponent);
component = fixture.componentInstance;
component.isShown = false;
fixture.detectChanges();
});
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should check if toggleDropdownwas called', fakeAsync(() => {
spyOn(component, 'toggleDropdown');
let button =
fixture.debugElement.nativeElement.querySelector('#game-category');
button.click();
tick();
fixture.detectChanges();
expect(component.toggleDropdown).toHaveBeenCalled();
expect(component.isShown).toBe(true, 'isShown has not changed');
}));
})
触发点击事件后 isShown
属性 没有改变它的值。
任何帮助表示赞赏。谢谢!
当你做spyOn(component, 'toggleDropdown');
时,它模拟方法,它的内容变为空,不再执行。你必须添加spyOn(component, 'toggleDropdown').and.callThrough()
,所以该方法实际上被调用了。