繁体   English   中英

角度材料单元测试:模拟 MatSelectChange 事件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM