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')),例如,在您的第一次测试中?它在一个组件中,我尝试了很多东西,但测试失败了。此外,我不确定如何在这里构建一个有意义的测试,以测试此方法的主要目标。