You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:45:43