javascript - 在规范文件中,如何测试以事件为参数的组件方法?
问题描述
我有一个基于primeng代码的自动完成菜单。第一个代码块是我在组件文件中的内容。而 filterBrands(event) 是我试图在单独的规范文件中测试的方法。第二个块是 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);
}
}
}
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
不用担心@Output
of :completeMethod
primeng
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 测试应该涵盖primeng
当它与您的组件集成以及keyboard
向它提供一些输入时的行为方式。
推荐阅读
- ms-access - MS Access:带有不等式运算符的左外自连接
- content-security-policy - 为什么一个简单的按钮标签会违反 CSP?
- reactjs - Reactjs+Flow:onChange 抛出错误
- javascript - React:当父组件重新渲染时,子组件是否总是重新渲染?
- c - 用popen在C中读取arecord的输出
- mysql - 设置初始用户并通过 phpmyadmin
- html - 隐藏左侧导航栏后如何使打印样式表的内容全宽
- javascript - 在查看器中定位 html 的最佳方法是什么?
- mysql - 如果将 INT 列更改为 MEDIUMINT,我将节省多少大小?
- java - Wildfly - 未安装的必需服务 - TransactionSynchronizationRegistry