[英]Angular Material Unit Testing: Mocking a MatSelectChange event
描述:我正在为以下函数编写单元测试:
updateUserStatus(event: MatSelectChange | any, reportID: number) {
const matOption = (event.source.selected as MatOption);
const option = matOption.value;
this.setUserActions(reportID, option.id);
}
测试规格
it('should test updateUserStatus', () => {
spyOn(component, 'updateUserStatus').and.callThrough();
spyOn(component, 'setUserActions').and.callFake(() => {});
component.updateUserStatus({{MOCK_EVENT_HERE}}, 123456);
expect(component.updateUserStatus).toHaveBeenCalledTimes(1);
expect(component.setUserActions).toHaveBeenCalledTimes(1);
});
问题:我发现很难模拟“事件”参数,它是“MatSelectChange”的一个实例。
1. 从浏览器控制台复制“事件”值
这给了我一个:
未捕获的类型错误:将循环结构转换为 JSON。
2. 创建一个新的 MatSelectChange 实例
'MatSelect' 构造函数需要 12-13 个参数哦,天哪! 不知道如何实例化:
const selectChange = new MatSelectChange(new MatSelect(), 'Value');
如果缺少任何其他细节,请告诉我这是否有助于更好地理解它。
如果你仍然坚持这个,我只会发送一个普通的 JavaScript 对象。
尝试:
it('should test updateUserStatus', () => {
spyOn(component, 'updateUserStatus').and.callThrough();
spyOn(component, 'setUserActions').and.callFake(() => {});
event.source.selected
const mockMatSelectChange = {
event: {
source: {
selected: {
value: {
id: '123', // mock ID to whatever it should be
}
}
}
}
};
component.updateUserStatus(mockMatSelectedChange, 123456);
expect(component.updateUserStatus).toHaveBeenCalledTimes(1);
expect(component.setUserActions).toHaveBeenCalledTimes(1);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.