我有一个 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
但它对我没有帮助。也许我用错了。
感谢您的帮助!
就我个人而言,我很少使用
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 非常相似,但更严格。