JEST:Expect()仅数组中的唯一元素

时间:2019-07-12 06:24:50

标签: mongodb testing jestjs

我正在使用jest编写一个测试案例,其中从Mongodb数据库返回数据。mongodb中的独特方法仅返回非重复元素。现在我试图在jest中使用Expect()来仅测试中的唯一元素从MongoDB返回的数组。

从MongoDB返回的数组

A_r = [ 1, 0, 3, 2]

是否有类似下面的玩笑匹配器来检查数组中的非重复元素?

arr = [ 'Pizza' ,'Burger' , 'HotDogs'] //All elements are unique

还是应该使用现有匹配器完成任何逻辑?

1 个答案:

答案 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