Angular 如何单元测试以角度更新过滤器的方法?

Angular 如何单元测试以角度更新过滤器的方法?,angular,typescript,unit-testing,jasmine,karma-jasmine,Angular,Typescript,Unit Testing,Jasmine,Karma Jasmine,我想对我的updateFilter()方法进行单元测试,该方法根据输入字段中每次击键返回的给定值过滤数组 我的方法如下所示: updateFilter(e) { const v = e.target.value.toLowerCase(); const t = this.t.filter((t) => { return t.id.toLocaleLowerCase().indexOf(v) !== -1 || !v; }); this.dat

我想对我的
updateFilter()
方法进行单元测试,该方法根据输入字段中每次击键返回的给定值过滤数组

我的方法如下所示:

  updateFilter(e) {
    const v = e.target.value.toLowerCase();
    const t = this.t.filter((t) => {
      return t.id.toLocaleLowerCase().indexOf(v) !== -1 || !v;
    });
    this.data = t;
    this.content = this.data;
    this.table.offset = 0;
  }
我这样准备单元测试,不知道下一步该做什么:

  describe('#updateFilter()', () => {
    it('format input string to lowercase', () => {

    });

    it('filter t array based on the given string ', () => {

    });

    it('offset should be 0', () => {

    });
  });

如何在此构建有意义的测试?

假设
updateFilter
方法是具有公共成员
内容的
filter组件的一部分,测试可以如下所示

import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing';

describe('#updateFilter()', () => {

    let fixture: ComponentFixture<FilterComponent>;
    let component: FilterComponent;
    let inputElement: HTMLInputElement;

    beforeEach(() => {
        TestBed.configureTestingModule({
            declarations: [FilterComponent]
        });
        fixture = TestBed.createComponent(FilterComponent);
        fixture.detectChanges();
        component = fixture.componentInstance;
        inputElement = <HTMLInputElement> fixture.debugElement.nativeElement.querySelector('INPUT');
        fixture.detectChanges();
    });

    it('format input string to lowercase', fakeAsync(() => {

        //given
        component.t = ?; // no idea what this member is made of
        inputElement.value = 'abC'; 
        const event = new KeyboardEvent('keydown', { key: 'C' });

        // when            
        inputElement.dispatchEvent(event);
        tick();

        // then
        expect(component.data).toBe(?); // define expected value here
    });

    ...
});
从'@angular/core/testing'导入{ComponentFixture,TestBed,fakeAsync,tick};
描述(“#updateFilter()”,()=>{
let夹具:组件夹具;
let组件:过滤器组件;
let inputElement:HTMLInputElement;
在每个之前(()=>{
TestBed.configureTestingModule({
声明:[过滤器组件]
});
fixture=TestBed.createComponent(过滤器组件);
fixture.detectChanges();
组件=fixture.componentInstance;
inputElement=fixture.debugElement.nativeElement.querySelector('INPUT');
fixture.detectChanges();
});
它('将输入字符串格式化为小写',fakeAsync(()=>{
//给定
component.t=?;//不知道这个成员是由什么组成的
inputElement.value='abC';
const event=newkeyboardevent('keydown',{key:'C'});
//什么时候
inputElement.dispatchEvent(事件);
勾选();
//然后
expect(component.data).toBe(?);//在此处定义期望值
});
...
});

方法是否在组件或服务中?您是否在“it”函数中尝试过类似以下内容:expect(myClass.updateFilter('MOCKED STRING')。toBe('MOCKED STRING')),例如,在您的第一次测试中?它在一个组件中,我尝试了很多东西,但测试失败了。此外,我不确定如何在这里构建一个有意义的测试,以测试此方法的主要目标。