首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Angular | Event Listeners进行Karma单元测试

使用Angular | Event Listeners进行Karma单元测试
EN

Stack Overflow用户
提问于 2018-08-02 12:07:39
回答 1查看 1.1K关注 0票数 1

考虑这部分代码:

代码语言:javascript
复制
      @ViewChild('amountSlider') amountSlider: any;
      @ViewChild('amountInput') amountInput: any;

      ** Some Code **

      setvariables()
        {
        const updateStep =  this.renderer.listen(this.amountInput.input.nativeElement, 'keydown', (evt) => {
          this.amountSlider.step = 1;
          const keyName = evt.key;
          if (keyName == 'Tab') {
            this.amountSlider.step = 100;
          }
        });
         const resetStep = this.renderer.listen(this.amountSlider.slider.nativeElement, 'mouseover', (evt) => {
          this.amountSlider.step = 100;
        });
  }

在(事件侦听器)的一部分之后,我的代码在单元测试中困扰着我,我不会直接从DOM调用keydown或mouseover。有人能帮我写单元测试来覆盖这个吗?

test.spec.ts

代码语言:javascript
复制
describe('setVariables', () => {
    it('makes expected calls', () => {
        const renderer2Stub: Renderer2 = fixture.debugElement.injector.get(Renderer2);
        spyOn(renderer2Stub, 'listen');
        comp.setVariables();
        expect(renderer2Stub.listen).toHaveBeenCalled();
    }) 
 });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-02 15:39:50

尝试使用带有密钥代码的KeyboardEvent

代码语言:javascript
复制
describe('setVariables', () => {
it('makes expected calls', () => {
    const renderer2Stub: Renderer2 = fixture.debugElement.injector.get(Renderer2);
    spyOn(renderer2Stub, 'listen');
    // for down arrow event for example 
    comp.setVariables();
     const event: Event = new KeyboardEvent('keydown', {
      'code': '40' 
     });
     window.dispatchEvent(event);
     fixture.detectChanges();
    expect(renderer2Stub.listen).toHaveBeenCalled();
  }) 
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51645337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档