求助:为JEST中的filterCountries函数编写测试用例
为filterCountries函数编写Jest测试用例
首先明确原函数实现:
// countries -> [{ // "name": "Andorra", // "code": "AD" // },...] //searchTerm = 'AD' export const filterCountries = (countries, searchTerm) => { let filteredCountried = countries if(searchTerm?.length){ filteredCountried = countries.filter(val => { return val.code.toLowerCase().includes(searchTerm.toLowerCase()) || val.name.toLowerCase().includes(searchTerm.toLowerCase()) }) } return filteredCountried }
以下是覆盖核心场景的完整Jest测试用例:
// in test.js file describe('Test filterCountries', () => { // 测试用基础国家数据 const testCountries = [ { name: "Andorra", code: "AD" }, { name: "United States", code: "US" }, { name: "Australia", code: "AU" }, { name: "Germany", code: "DE" }, { name: "Austria", code: "AT" } ]; test('当searchTerm为空、undefined或null时,返回原数组', () => { expect(filterCountries(testCountries, '')).toEqual(testCountries); expect(filterCountries(testCountries)).toEqual(testCountries); expect(filterCountries(testCountries, null)).toEqual(testCountries); }); test('按国家代码匹配(大小写不敏感)', () => { expect(filterCountries(testCountries, 'AD')).toEqual([{ name: "Andorra", code: "AD" }]); expect(filterCountries(testCountries, 'au')).toEqual([{ name: "Australia", code: "AU" }]); expect(filterCountries(testCountries, 'A')).toEqual([ { name: "Andorra", code: "AD" }, { name: "Australia", code: "AU" }, { name: "Austria", code: "AT" } ]); }); test('按国家名称匹配(大小写不敏感)', () => { expect(filterCountries(testCountries, 'GER')).toEqual([{ name: "Germany", code: "DE" }]); expect(filterCountries(testCountries, 'states')).toEqual([{ name: "United States", code: "US" }]); expect(filterCountries(testCountries, 'austria')).toEqual([{ name: "Austria", code: "AT" }]); }); test('同时匹配代码和名称的场景', () => { expect(filterCountries(testCountries, 'A')).toEqual([ { name: "Andorra", code: "AD" }, { name: "Australia", code: "AU" }, { name: "Austria", code: "AT" } ]); }); test('无匹配结果时返回空数组', () => { expect(filterCountries(testCountries, 'ZZ')).toEqual([]); expect(filterCountries(testCountries, 'xyz')).toEqual([]); }); test('传入空国家数组时,始终返回空数组', () => { expect(filterCountries([], 'AD')).toEqual([]); expect(filterCountries([], '')).toEqual([]); }); });
测试用例设计说明:
- 覆盖边界场景:空搜索词、空国家数组、无匹配结果
- 验证大小写不敏感的匹配逻辑
- 分别测试代码匹配、名称匹配、同时匹配两种字段的情况
- 验证部分匹配(搜索词为字段子串)的逻辑
内容的提问来源于stack exchange,提问作者deepak mehra
相关产品推荐
相关产品推荐

