首页 > 解决方案 > Jasmine - 测试 execCommand

问题描述

我正在尝试使用 jasmine 测试我的 Angular 应用程序,其中组件具有单击和复制功能。

it('Should copy value to cilpboard', () => {
  ...
  spyOn(document, 'execCommand').and.callThrough();
  // element.querySelector('#copy').click();
  // expect(document.execCommand).toHaveBeenCalledWith('copy');
});

但是每次我运行测试时,都会出现以下错误:

spyOn : execCommand() 方法不存在

我没有在任何地方声明“文档”,我只是在这里直接调用它。

标签: angulartestingjasminekarma-jasmine

解决方案


我认为您需要在文档而不是元素上执行命令。我知道您已经在上面的代码片段中评论了该代码,但是,如果文档没有得到命令,您可以尝试并测试吗

 document.querySelector('#copy').click();

然后期待

expect(document.execCommand).toHaveBeenCalledWith('copy');

注意:运行此测试时,您的文档上应该有一个带有 id 副本的元素。我不确定它是否是从您的组件创建的,如果不是,请 createElement 并附加到 dom


推荐阅读