单元测试角2(离子2)自定义指令

时间:2018-03-21 15:30:51

标签: javascript angular unit-testing ionic2 testbed

我在离子应用程序中为文本屏蔽制作了一个自定义指令。该指令用于电话号码的输入文本屏蔽。 它使用ngControl来获取和设置输入字段的值。

@HostListener('keyup', ['$event'])
onKeyUp($event: any) {
        var inputValue = this.ngControl.control.value;   
        this.ngControl.control.setValue(this.getMaskedValue(inputValue));
    }
}

我尝试了很多方法来测试它但我无法设置值。我通过导入ngControl并绑定输入来获得FormsModule

但我仍然无法获得this.ngControl.control.value的价值。当我输入输入字段时,它工作正常,但无法定义测试用例。

这是测试用例片段

it('should have masked value', () => {
  fixture.detectChanges();
  let element = inputEl.nativeElement;
  element.value = '999';
  inputEl.nativeElement.dispatchEvent(new Event('keyup', key));
  fixture.detectChanges();
  fixture.whenStable().then(() => {
    expect(element.value).toEqual('(999)');
  });
}

这是我的测试组件:

@Component({
  template: `<input type="text" [(ngModel)]="val"   customDirective="(999)-999-9999">`
})
class TestCustomDirectiveComponent {
  constructor(public formBuilder: FormBuilder) {}
  val = '';
}

我想写一个像expect(element.value).toEqual('(999)-999-9999这样的测试用例。我该怎么测试呢?

1 个答案:

答案 0 :(得分:0)

只需覆盖对象即可。

it('should have masked value', () => {
  fixture.detectChanges();
  let element = inputEl.nativeElement;
  Object.defineProperty(
    directive.ngControl.control,
    'value',
    { writable: true, value: 'your value' }
  );
  directive.onKeyUp(null);
  expect(element.value).toEqual('(999)');
}

(我假设您通过变量directive

引用了您的指令