Jest测试:如何对对象公共属性设置不同期望取值?
如何针对返回对象的公共键设置不同期望值(E2E测试断言)
我正在进行E2E测试,想要验证返回对象中的部分数据。目前我的断言代码如下:
expect(response.body).toEqual( expect.objectContaining({ ...result, passsword: expect.any(String) }), );
请问有没有人知道,如何针对对象的公共键设置不同的期望值?
你可以直接在expect.objectContaining的对象参数里,给每个需要验证的键单独指定对应的匹配规则,主流测试框架(比如Jest)支持多种匹配器组合使用,完全能满足不同键的验证需求:
- 固定值匹配:直接写预期的固定值,比如
username: 'test_user' - 类型匹配:用
expect.any(类型),比如你代码里的password: expect.any(String)(注意你代码里的passsword拼写错误,应为password) - 正则匹配:用
expect.stringMatching(正则表达式),比如email: expect.stringMatching(/^[a-z0-9]+@example\.com$/) - 范围匹配:针对数字类型,用
expect.greaterThan()/expect.lessThan(),比如age: expect.greaterThan(18) - 自定义匹配:通过
expect.extend()扩展专属匹配器,应对特殊规则的字段
举个实际示例,假设要验证返回对象里的username是固定值、password为任意字符串、email符合指定格式、age大于18,代码可以这么写:
expect(response.body).toEqual( expect.objectContaining({ username: 'arthur_d', password: expect.any(String), email: expect.stringMatching(/^arthur@example\.com$/), age: expect.greaterThan(18) }) );
如果你的result对象里已经包含部分固定值的键,也可以用扩展运算符合并,同时覆盖需要特殊规则的字段:
// 假设result里已有username、email的固定值,给password和age设置特殊规则 expect(response.body).toEqual( expect.objectContaining({ ...result, password: expect.any(String), age: expect.lessThan(60) }) );
这样就能灵活给每个公共键设置不同的验证逻辑了。
内容的提问来源于stack exchange,提问作者Arthur Demenskiy
相关产品推荐
相关产品推荐

