开玩笑:如何测试对象键和值?
Posted
技术标签:
【中文标题】开玩笑:如何测试对象键和值?【英文标题】:Jest: how to test for object keys and values? 【发布时间】:2018-05-25 02:02:51 【问题描述】:我有一个mapModule
,我在其中导入和导出组件:
import ComponentName from '../components/ComponentName';
export default
name: ComponentName,
;
如何测试mapModule
是否具有正确的导出键、值以及它们是否为空或未定义?
【问题讨论】:
【参考方案1】:你可以使用其中之一:
toEqual 和 toMatchObject 是对象的模板匹配器:
let Obj = name: 'component name', id: 2;
expect(oneObj).toEqual(name: 'component name') // false, should be exactly equal all Obj keys and values
expect(oneObj).toMatchObject(name: 'component name') // true
或轻松使用 toHaveProperty :
let Obj = name: 'component name';
expect(oneObj).toHaveProperty('name') // true
expect(oneObj).toHaveProperty('name', 'component name') // true
【讨论】:
.toHaveProperty 是我想要的!谢谢 我们必须在数组中添加属性名称【参考方案2】:在 jest 23.3.0 版本中,
expect(string).toMatch(string)
需要一个字符串。
用途:
const expected = name:'component name'
const actual = name: 'component name', type: 'form'
expect(actual).toMatchObject(expected)
结果通过测试
【讨论】:
【参考方案3】:请记住,.toMatchObject
检查
“javascript 对象匹配对象属性的子集。”
所以 toMatchObject
可能会有意想不到的断言,例如:
expect( a: 1, b: 2 ).toMatchObject( a: 1 ); // pass
如果你确实想精确匹配一个对象,你应该使用.toStrictEqual
,从jest 23
开始可用:
expect( a: 1, b: 2 ).toStrictEqual( a: 1 ); // fail
【讨论】:
实际上这正是 toMatchObject 的断言所设计的。如果你不想要这种行为,你可以使用 toEqual... 这个答案确实应该是大多数情况下的首选解决方案。【参考方案4】:对于单个密钥,您可以签出
expect(Boolean(obj[prop])).toBe(true | false);
您可以使用多个键(所有键都必须存在),
expect(Boolean(obj[prop1]) && Boolean(obj[prop2])).toBe(true | false);
对于多个键(必须存在任何一个),您可以使用
expect(Boolean(obj[prop1]) || Boolean(obj[prop2])).toBe(true | false);
【讨论】:
【参考方案5】:另一种方法是:
expect(JSON.stringify(object)).toBe(JSON.stringify(object))
这将确保对象相同。
但是使用这个:
expect(object).toMatchObject(object)
在大多数情况下是最佳选择。
【讨论】:
嘿朋友,你永远不应该尝试从一个对象比较 JSON.stringify,因为不能保证对象顺序,所以 stringify 版本可能会改变。【参考方案6】:刚刚添加了这个技巧,认为它为我自己的测试提供了更好的粒度,尤其是在匹配模拟服务的参数时:
expect.objectContaining(
url: expect.stringContaining('https://'),
)
或者,您可以将正则表达式与expect.stringMatching
一起使用,它会根据值测试给定的正则表达式。很整洁。
expect.stringContaining expect.stringMatching
【讨论】:
以上是关于开玩笑:如何测试对象键和值?的主要内容,如果未能解决你的问题,请参考以下文章