我正在使用jest编写一个测试案例,其中从Mongodb数据库返回数据。mongodb中的独特方法仅返回非重复元素。现在我试图在jest中使用Expect()来仅测试中的唯一元素从MongoDB返回的数组。
从MongoDB返回的数组
A_r = [ 1, 0, 3, 2]
是否有类似下面的玩笑匹配器来检查数组中的非重复元素?
arr = [ 'Pizza' ,'Burger' , 'HotDogs'] //All elements are unique
还是应该使用现有匹配器完成任何逻辑?
答案 0 :(得分:1)
没有方法可以检查数组是否具有唯一值,但是我建议这样做:
const goods = [ 'Pizza' ,'Burger' , 'HotDogs'];
const isArrayUnique = arr => Array.isArray(arr) && new Set(arr).size === arr.length; // add function to check that array is unique.
expect(isArrayUnique(goods)).toBeTruthy();
您可以使用expect.extend
将自己的匹配器添加到Jest。
例如:
expect.extend({
toBeDistinct(received) {
const pass = Array.isArray(received) && new Set(received).size === received.length;
if (pass) {
return {
message: () => `expected [${received}] array is unique`,
pass: true,
};
} else {
return {
message: () => `expected [${received}] array is not to unique`,
pass: false,
};
}
},
});
并使用它:
const goods = [ 'Pizza' ,'Burger' , 'HotDogs'];
const randomArr = [ 'Pizza' ,'Burger' , 'Pizza'];
expect(goods).toBeDistinct(); // Passed
expect(randomArr).toBeDistinct(); // Failed