如何用Jest内置函数检验变量是否为null或boolean类型?
如何用Jest更优雅地校验可能为boolean或null的变量?
当然有更优的Jest内置方法啦!你目前用的转字符串正则匹配的方式虽然能实现需求,但存在不够严谨的问题(比如如果变量是字符串类型的"null"也会被误判为匹配),而且可读性也不如Jest原生的校验方案。下面推荐几种更合适的内置实现方式:
方法1:用toContain匹配允许的值列表
因为你的变量只可能是null、true、false这三个值,直接用toContain检查变量是否在允许的集合里就非常直观:
expect([null, true, false]).toContain(variable);
这种写法简单易懂,一眼就能看出允许的取值范围,适合值的可选数量很少的场景。
方法2:用satisfies匹配器(Jest 28及以上版本支持)
如果你的Jest版本在28或更高,可以使用satisfies匹配器,它允许你传入一个自定义校验函数,直接校验值的类型或条件:
expect(variable).satisfies(value => value === null || typeof value === 'boolean' );
这种方式更灵活,如果以后需要扩展允许的类型(比如加上undefined),只需要修改回调里的条件即可,而且直接校验原始值的类型,比转字符串的方式更严谨。
方法3:分情况校验(获得更精准的错误提示)
如果希望校验失败时得到更明确的错误信息,可以分开判断两种情况:
if (variable === null) { expect(variable).toBeNull(); } else { expect(typeof variable).toBe('boolean'); }
或者用Jest的expect.oneOf组合断言(oneOf是expect的内置方法,用来匹配列表中的任意一项):
expect(variable).toEqual(expect.oneOf([null, expect.any(Boolean)]));
这种写法的好处是,当变量不符合要求时(比如是数字1或者字符串"false"),Jest会给出更具体的错误提示,帮助你快速定位问题。
总的来说,优先推荐前两种方法,它们都是Jest内置的功能,比你当前的正则方案更严谨、可读性更强。
内容的提问来源于stack exchange,提问作者Dez
相关产品推荐
相关产品推荐

