首页 > 解决方案 > toThrow 检查数组的不可更改性

问题描述

提示,如何检查数组?最终的结果是,测试应该检查数组是否发生了变化,如果是,则给出无法更改的错误。

import { List, Set } from "immutable"
export let list1: number[] = [1, 2, 3];

export function mass(list1) {
   let listFromArray = List(list1); 
    if (listFromArray == List(list1)) {
      throw new Error("immutable");
    }
        return listFromArray; 
  };

测试代码:

import {mass} from "./sum"
import { List, Set, isImmutable } from "immutable"

test('check for variability', () => {
  const list1: number[] = [1, 2, 3];
  const listFromArray = mass(list1);
  const expectedResult = List([1, 2, 3]);
  expect(expectedResult).toThrowError('Error'); 
});

标签: javascriptunit-testingprotractorjestjsimmutable.js

解决方案


认为您正在寻找数组比较。

对于那个场景,您可以比较数组中的项目..

有很多有用的方法可以做到这一点,其中一种是使用every方法:\

var arr_1 = [1,2,3];
var arr_2 = [1,2,3];

if(arr_1.every((v,i) => v === arr_2[i])){
  alert("si");
}
else{
    alert("no")
}

当然,这不是优化的,因为您可能想提前检查长度等以提前出局。

相关:如何比较 JavaScript 中的数组?

https://jsfiddle.net/tspqeyz3/

对于 immutable.js,有一个equals方法可以检查值的映射。(NodeJS 示例)

const { Map, is } = require('immutable')
const map1 = Map({ a: 1, b: 2, c: 3 })
const map2 = Map({ a: 1, b: 2, c: 3 })
map1 !== map2     // two different instances are not reference-equal
map1.equals(map2) // but are value-equal if they have the same values
is(map1, map2)    // alternatively can use the is() function

因此,在这种情况下,您应该能够确定两者的相等性。


推荐阅读