Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在等级库文件中,如何测试以事件为参数的组件方法?_Javascript_Angular_Unit Testing_Karma Jasmine_Primeng - Fatal编程技术网

Javascript 在等级库文件中,如何测试以事件为参数的组件方法?

Javascript 在等级库文件中,如何测试以事件为参数的组件方法?,javascript,angular,unit-testing,karma-jasmine,primeng,Javascript,Angular,Unit Testing,Karma Jasmine,Primeng,我有一个自动完成菜单,我的基础上的素描代码。第一块代码是我在组件文件中的代码。filterBrands(事件)是我试图在一个单独的规范文件中测试的方法。第二个块是html文件中的代码,其中包含实际页面的内容。我不确定从哪里开始测试这个方法 组成部分: brands: string[] = ['Audi','BMW','Fiat','Ford','Honda','Jaguar','Mercedes','Renault','Volvo','VW']; filteredBrands:

我有一个自动完成菜单,我的基础上的素描代码。第一块代码是我在组件文件中的代码。filterBrands(事件)是我试图在一个单独的规范文件中测试的方法。第二个块是html文件中的代码,其中包含实际页面的内容。我不确定从哪里开始测试这个方法

组成部分:

    brands: string[] = ['Audi','BMW','Fiat','Ford','Honda','Jaguar','Mercedes','Renault','Volvo','VW'];

    filteredBrands: any[];

    brand: string;
    filterBrands(event) {
            this.filteredBrands = [];
            for(let i = 0; i < this.brands.length; i++) {
                let brand = this.brands[i];
                if(brand.toLowerCase().indexOf(event.query.toLowerCase()) == 0) {
                    this.filteredBrands.push(brand);
                }
            }
        }
品牌:字符串[]=[“奥迪”、“宝马”、“菲亚特”、“福特”、“本田”、“捷豹”、“梅赛德斯”、“雷诺”、“沃尔沃”、“大众”];
过滤品牌:任何[];
品牌:弦;
filterBrands(事件){
this.filteredBrands=[];
for(设i=0;i
html部分:

<p-autoComplete   header = "Brand Name" placeholder="Search Brand Name" [(ngModel)]="brand" 
     [suggestions]="filteredBrands" (completeMethod)="filterBrands($event)" [minLength] = "1"
     [size] = "37" [dropdown] = "true" (input)  ="dt.filter($event.target.value,'displayName','contains')" (onSelect)="dt.filter(brand,'displayName','contains')">
 </p-autoComplete>

好的,首先,单元测试就是通过尽可能地将组件与其他依赖项隔离来测试组件。因此,我建议您只测试
filterBrands
函数的行为,不要担心
priming的
completeMethod
@Output

it('should have "filterBrands()" pushing data',()=>{
  component.filteredBrands = [];
  const event = {query: "Au"};
  component.filterBrands(event);
  expect(component.filteredBrands.length).toBe(1);
  // and similarly more checks

})

另一方面,您可以通过以下方式使用更多JavaScript:

filterBrands(event) {
   this.filteredBrands = this.brands.filter(brand =>               
       brand.toLowerCase().indexOf(event.query.toLowerCase()) == 0
   );
}


基本上,E2E测试应该包括
priming
与组件集成时以及向其提供一些
键盘
输入时的行为

我的答案有效吗?@ShashankVivek你看到我对你的答案的评论了吗?出于某种原因,当我在我的代码覆盖率上测试这一点时,在显示行运行了多少次的一侧,它在我推广品牌的行上显示为x36。@nolanite1:推动在循环中,所以这可能是一个原因