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

Sat*_*GVK 5 testing mongodb jestjs

我正在使用 jest 编写一个测试用例来测试从方法返回的数据。该方法返回非重复元素的数组。现在我正在尝试在 jest 中使用 expect() 来测试从该方法返回的数组是否只有唯一元素。

从方法返回的数组

arr = [ 'Pizza' ,'Burger' , 'HotDogs'] // All elements are unique
Run Code Online (Sandbox Code Playgroud)

有没有像下面这样的笑话匹配器来检查数组中的非重复元素?

expect(arr).toBeUnique()
Run Code Online (Sandbox Code Playgroud)

或者应该完成使用现有匹配器的任何逻辑?

Yev*_*kov 10

没有建立在检查数组是否具有唯一值的方法上,但我建议做这样的事情:

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();
Run Code Online (Sandbox Code Playgroud)

您可以使用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,
           };
         }
       },
     });
Run Code Online (Sandbox Code Playgroud)

并使用它:

const goods = [ 'Pizza' ,'Burger' , 'HotDogs'];
const randomArr = [ 'Pizza' ,'Burger' , 'Pizza'];

expect(goods).toBeDistinct(); // Passed
expect(randomArr).toBeDistinct(); // Failed
Run Code Online (Sandbox Code Playgroud)

  • 是的,Array.isArray(receivedArray) - 方法确定传递的值是否是数组。Set是ES6中引入的新数据结构,Set中的值只能出现一次;它在套装系列中是独一无二的。因此,如果我们将具有非唯一值的数组放入“new Set(arr)”中,我们将得到一个具有唯一值的数组,因为正如我所说,“Set”中的值仅出现一次。然后我们只检查新的(只有唯一值)数组和接收到的数组的大小,如果在“new Set(arr)”之后数组的长度没有改变,则意味着给定数组中没有唯一值。 (2认同)