作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Angular 的新手。我正在尝试为 mat 对话框编写单元测试,但它会抛出错误。
我在ts文件中的方法:
isMobileScreen= Observable<BreakpointState>= this.breakpointObserver.observe('(max-width:600px)');
OpenDialog(){
if(index===0){
this.dialogref=this.dialog.open(MyComonent,{
maxWidth:'600px'
});
Const dialogSub= this.isMobileScreen.subscribe(result=> {
if(result.matches){
this.dialogref.updatesize('100%','100%');
}
else{
this.dialogref.updatesize('50%');
}
});
this.dialogref.afterclosed(). subscribe (results=>{
dialogSub.unsubcribe():
});
}
规范文件
class isMobileScreen {
Value= new subject ();
isMobileScreen= this.value.asObservable();
setValue(val){ // getting error here cannot read property 'setvalue' of undefined
this.value.next(val);
}
}
// Inside describe
describe('component', ()=>{
...
Let isMobileScreen: isMobileScreen;
Const dialogRefMock={
afterClosed(){
return of(true);
},
updatesize(width?:string, height?: string){}
};
Const dialogMock={ open:()=> dialogRefMock};
// Inside before each I gave dialogMock as provider
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ MyComponent],
imports: [RouterTestingModule,MatDialogModule],
providers: [ { provide: MatDialog, useValue: dialogStub },{provide : MatDialogRef, useValue : {}, { provide: isMobileScreen, useValue: isMobileScreen }]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
isMobileScreen = TestBed.get(isMobileScreen);
});
it('',async(()=>{
component.Opendialog();
isMobileScreen.setvalue(true);
fixture.detectChanges();
fixture.whenStable().then(()=>{
let spy= spyOn(component.dialogref, 'updatesize').and.callThough();
expect (spy).toHaveBeenCalled(); // getting error here this.dialogref.updatesize is not a function.
});
}));
});
我遇到了两个错误。
可能是我写错了mocking。请帮我解决这个错误
最佳答案
试试这个
providers: [ { provide: MatDialog, useValue: dialogMock },
{provide : MatDialogRef, useValue : dialogRefMock}
]
还要确保被模拟的方法被称为 updateSize
并且大写 S
关于Angular Mat对话框单元测试: This. dialogref.updatesize不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62778810/
我是一名优秀的程序员,十分优秀!