使用 jasmine 部分测试数组内对象属性的值

问题描述 投票:0回答:1

我有一个 PopupComponent,我正在尝试使用 Jasmine 进行测试。我的 PopupComponent 中有一个带有多个 Formcontrol 的表单,它将向 FormArray 添加一个条目。

所以我正在尝试测试表单中插入的值是否正确保存在表单数组中。问题是,如果我添加一个条目,它会自动为我生成一个 UUID,但我不想测试它。

假设我的 Formarray 中有以下条目:

{
uuid: 'd3d354c9-ad70-4bef-9b40-e30047f1e203'
age: '23'
name: 'John'
job: 'Software Engineer'
}

这就是我尝试过的:

expect(values).toEqual([{
age: '23'
name: 'John'
job: 'Software Engineer'}]);

显然我得到了一个错误,uuid 丢失了。如何在没有 uuid 的情况下部分测试这些值? 我已经研究过

jasmine.arrayContaining 
jasmine.objectContaining
但它对我没有帮助。也许我用错了。

感谢您的帮助!

angular jasmine
1个回答
1
投票

就我个人而言,我很少使用

arrayContaining
objectContaining
。在这种情况下,我倾向于使用
.some
.every
for loop
等默认使用 JavaScript。

expect(theArray.some(value => value.age === '23' && value.name === 'John' && value.job === 'Software Engineer')).toBeTrue();

类似上面的东西。当然,您也可以使用

for loop
forEach
循环。这个想法是将其归结为 JavaScript,然后对使用 JavaScript 获得的内容进行断言。

编辑 您可以使用

lodash
查看一个对象是否是另一个对象的子集:https://stackoverflow.com/a/49807621/7365461

您还可以像该用户在此处所做的那样创建自定义函数:https://stackoverflow.com/a/61676007/7365461

你可以这样做:

expect(_.isMatch(theObj, subsetObj)).toBeTrue();

TypeScript 与 JavaScript 非常相似,但更严格。

© www.soinside.com 2019 - 2024. All rights reserved.