如何编写Jest测试验证组件Prop值存在于JSON Payload中
问题分析与解决方案
你当前的测试失败的核心原因是断言逻辑搞反了:你用数组和单个字符串做toEqual比较,这永远不会匹配成功——payload.map(item => item.ItemName)返回的是包含所有ItemName的数组["Item 1", "Item 2", "Item 3"],而value是单个字符串"Item 1",两者类型和内容都不相等。
修正后的测试代码
const payload= [ { ItemName: "Item 1" }, { ItemName: "Item 2" }, { ItemName: "Item 3" }, ] it("Has a value from one of the items in the json payload", () => { const dropdown = enzyme.mount(<Dropdown {...DEMO_PROPS} />); const value = dropdown.props().Value; // 方式1:用Jest内置的toContain断言检查值是否在数组中 expect(payload.map(item => item.ItemName)).toContain(value); // 方式2:用数组some方法做更灵活的匹配判断 expect(payload.some(item => item.ItemName === value)).toBe(true); });
为什么这么改?
toContain是Jest专门为数组/可迭代对象设计的断言,完美匹配你的测试需求——验证组件的Value属性确实是payload中的某一个ItemName。- 第二种
Array.some()的写法扩展性更强,如果后续需要更复杂的匹配规则(比如忽略大小写、模糊匹配),可以直接修改内部的判断条件。
这两种写法都能准确验证你的组件Value值来自指定payload的要求,逻辑完全贴合测试目标。
内容的提问来源于stack exchange,提问作者blankface
相关产品推荐
相关产品推荐

