验证不可变数组的相等性

时间:2018-07-11 09:21:32

标签: javascript typescript testing jasmine jestjs

我有两个不可变的数组。一个是普通的([1,2,3,4]),另一个是乘以2([2,4,6,8])。 在测试中如何使用迭代将第一个数组的每个值与第二个数组的值相等? 1是2,2是4,依此类推。 我认为可以使用for循环来完成此操作,但是我不知道如何在实践中编写此代码。

import { List, Set } from "immutable"

export function mass() {
  let standardArray = List([1,2,3,4]);
  let mutatedArray = standardArray.map(x => x * 2);
  return mutatedArray;
};

测试代码 (我不知道如何进行)

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

test('Array Multiplication Test', () => {
  let standardArray = List([1,2,3,4]);
  let mutatedArray = standardArray.map(x => x * 2);
  expect(standardArray).not.toEqual(mutatedArray);
});

2 个答案:

答案 0 :(得分:0)

为什么不使用标志。取一个标志变量并将其设置为任何值,遍历数组,如果任何值不符合预期,则更改标志变量。 最后,检查标志变量的值。如果与初始设置相同,则它们相同,否则数组将不同。

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

test('Array Multiplication Test', () => {
  let standardArray = List([1,2,3,4]);
  let mutatedArray = standardArray.map(x => x * 2);
  let flag = false;
  for (let i = 0; i < standardArray.length; i++) {
    if (standardArray[i] * 2 != mutatedArray[i]) {
      flag = true;
      break;
    }
  }
  expect(flag).toEqual(false);
});

答案 1 :(得分:0)

我认为您想要这样的东西:

let testArr1 = [1,2,3,4]
let testArr2 = [2,4,6,8]
let testArr3 = [2,6,6,8]

function doesMatchCriteria(arr1, arr2) {
  if (arr1.length !== arr2.length) return false;
  return arr1.every((e, i) => ((e*2) === arr2[i]));
  return true;
}
console.log(doesMatchCriteria(testArr1, testArr2));  // true
console.log(doesMatchCriteria(testArr1, testArr3));  // false

因此,您的test函数可能是这样的:

test('Array Multiplication Test', () => {
  let testArr1 = [1,2,3,4]
  let testArr2 = [2,4,6,8]
  expect(doesMatchCriteria(testArr1, testArr2)).toBe(true);
});      

不要忘记在同一文件中定义doesMatchCriteria函数。