JavaScript:为什么会出现此AssertionError?

时间:2019-03-02 04:40:37

标签: javascript arrays testing ecmascript-6 foreach

我有一个index.js文件,该文件正在实现forEach助手,如下所示:

var images = [
  { height: 10, width: 30 },
  { height: 20, width: 90 },
  { height: 54, width: 32 }
];
var areas = [];
images.forEach(function(image) {
  return areas.push(image.height * image.width);
});

console.log(areas);

module.exports = images;

我知道解决方案有效,您知道解决方案有效,

然后在我的test.js文件中:

const chai = require("chai");
const images = require("./index.js");
const expect = chai.expect;

describe("areas", () => {
  it("contains values", () => {
    expect([]).equal([300, 1800, 1728]);
  });
});

运行npm test时,我继续收到AssertionError。

我将包含package.json文件:

{
  "name": "my_tests",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "mocha"
  },
  "keywords": [],
  "license": "MIT",
  "dependencies": {
    "chai": "4.2.0",
    "mocha": "6.0.2"
  }
}

我重构了test.js文件,如下所示:

const chai = require("chai");
const areas = require("./index.js");
const expect = chai.expect;

describe("areas", () => {
  it("contains values", () => {
    const areas = [];
    expect(areas).equal([300, 1800, 1728]);
  });
});

仍然出现AssertionError:

AssertionError: expected [] to equal [ 300, 1800, 1728 ]
      + expected - actual

      -[]
      +[
      +  300
      +  1800
      +  1728
      +]

1 个答案:

答案 0 :(得分:0)

该错误是由于您使用的Chai方法引起的。 Chai.equal在两个数组(===)之间进行身份比较。由于这两个数组在内存中不是完全相同的对象,因此即使内容相同,也会始终失败。您需要Chai.eql对所有值进行深度比较。

expect([1,2,3]).equal([1,2,3]) // AssertionError
expect([1,2,3]).eql([1,2,3]) // true