Javascript 在等级库文件中,如何测试以事件为参数的组件方法?
我有一个自动完成菜单,我的基础上的素描代码。第一块代码是我在组件文件中的代码。filterBrands(事件)是我试图在一个单独的规范文件中测试的方法。第二个块是html文件中的代码,其中包含实际页面的内容。我不确定从哪里开始测试这个方法 组成部分: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:
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:推动在循环中,所以这可能是一个原因