如何用Jest测试验证值是否存在于枚举中?
解决Jest验证值是否存在于枚举中的问题
你的测试用例问题出在:toContain方法的使用场景不对——它是用来检查数组是否包含指定元素,或字符串是否包含子串,但你把整个枚举对象MEM_STATUS传进去,而实际返回的是单个字符串值'live',自然匹配失败。
要验证返回值是否是MEM_STATUS枚举的有效值,你需要先提取枚举的所有值,再做检查,以下是两种常用写法:
写法一:用Object.values提取枚举值,结合toContain
test('Should be valid', () => { const actualStatus = TestCasesExport.userAccStatus(ACC_STATUS.LIVE); // 提取MEM_STATUS的所有值组成数组,检查是否包含实际返回值 expect(Object.values(MEM_STATUS)).toContain(actualStatus); });
写法二:直接用数组includes方法结合toBe(true)
如果你更习惯直接判断布尔值,也可以这么写:
test('Should be valid', () => { const actualStatus = TestCasesExport.userAccStatus(ACC_STATUS.LIVE); expect(Object.values(MEM_STATUS).includes(actualStatus)).toBe(true); });
补充说明
Object.values(MEM_STATUS)会把枚举对象的所有值(比如"live"、"inactive"等)转换成一个数组,这样就能用数组的包含检查方法了。- 如果你还需要验证返回值对应的键也存在于枚举中,可以用
Object.keys(MEM_STATUS)提取键做类似检查。
内容的提问来源于stack exchange,提问作者Chaudhry Talha
相关产品推荐
相关产品推荐

