Getting error after running the jasmine test case :- TypeError: this.snackBarRef.dismiss is not a function
Getting error after running the jasmine test case :- TypeError: this.snackBarRef.dismiss is not a function
我在 运行 测试用例之后遇到错误。下面是我的 ts 文件。
import { Component, OnInit, Inject} from '@angular/core';
import { MAT_SNACK_BAR_DATA } from '@angular/material';
import { MatSnackBarRef } from '@angular/material';
@Component({
selector: 'Message',
templateUrl: './Message.component.html',
styleUrls: ['./Message.component.scss'],
})
export class MessageComponent implements OnInit {
constructor(
@Inject(MAT_SNACK_BAR_DATA) public data: any,
public snackBarRef: MatSnackBarRef<MessageComponent>
) {}
ngOnInit() {}
dismiss(): void {
this.snackBarRef.dismiss();
}
}
我收到以下错误 - 类型错误:this.snackBarRef.dismiss 不是函数
我窥探了如下函数 -
describe('MessageComponent', () => {
let component: MessageComponent;
let fixture;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [{ provide: MAT_SNACK_BAR_DATA, useValue: {} }, { provide: MatSnackBarRef, useValue: {} }],
declarations: [MessageComponent],
});
fixture = TestBed.createComponent(MessageComponent);
component = fixture.componentInstance;
spyOn(component, 'dismiss').and.callThrough();
});
it('should call dismiss function', () => {
component.dismiss();
expect(component.dismiss).toHaveBeenCalled();
});
});
我需要修复此错误的解决方案。
在组件实例中的测试运行时属性 snackBarRef
是 {} 因为您在 TestBed 中声明了它 ({ provide: MatSnackBarRef, useValue: {} }
.
您正在监视 dismiss
方法(在测试运行时)。 Dismiss 正在调用 this.snackBarRef.dismiss
并且因为 testBed this.snackBarRef
是 {} 所以 this.snackBarRef.dismiss
是未定义的,调用它会抛出错误。
要解决此问题,请创建更复杂的 snackBarRef
模拟,例如{ provide: MatSnackBarRef, useValue: { dismiss: () => {} } }
。在那种情况下测试不会崩溃。
监视 this.snackBarRef.dismiss
并检查是否被调用也很好。
我在 运行 测试用例之后遇到错误。下面是我的 ts 文件。
import { Component, OnInit, Inject} from '@angular/core';
import { MAT_SNACK_BAR_DATA } from '@angular/material';
import { MatSnackBarRef } from '@angular/material';
@Component({
selector: 'Message',
templateUrl: './Message.component.html',
styleUrls: ['./Message.component.scss'],
})
export class MessageComponent implements OnInit {
constructor(
@Inject(MAT_SNACK_BAR_DATA) public data: any,
public snackBarRef: MatSnackBarRef<MessageComponent>
) {}
ngOnInit() {}
dismiss(): void {
this.snackBarRef.dismiss();
}
}
我收到以下错误 - 类型错误:this.snackBarRef.dismiss 不是函数
我窥探了如下函数 -
describe('MessageComponent', () => {
let component: MessageComponent;
let fixture;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [{ provide: MAT_SNACK_BAR_DATA, useValue: {} }, { provide: MatSnackBarRef, useValue: {} }],
declarations: [MessageComponent],
});
fixture = TestBed.createComponent(MessageComponent);
component = fixture.componentInstance;
spyOn(component, 'dismiss').and.callThrough();
});
it('should call dismiss function', () => {
component.dismiss();
expect(component.dismiss).toHaveBeenCalled();
});
});
我需要修复此错误的解决方案。
在组件实例中的测试运行时属性 snackBarRef
是 {} 因为您在 TestBed 中声明了它 ({ provide: MatSnackBarRef, useValue: {} }
.
您正在监视 dismiss
方法(在测试运行时)。 Dismiss 正在调用 this.snackBarRef.dismiss
并且因为 testBed this.snackBarRef
是 {} 所以 this.snackBarRef.dismiss
是未定义的,调用它会抛出错误。
要解决此问题,请创建更复杂的 snackBarRef
模拟,例如{ provide: MatSnackBarRef, useValue: { dismiss: () => {} } }
。在那种情况下测试不会崩溃。
监视 this.snackBarRef.dismiss
并检查是否被调用也很好。