JavaScript: почему я получаю этот AssertionError?

У меня есть файл 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.info(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
      +]

В чем собственно ошибка? Вы имеете в виду экспортировать areas, а не images?

Jack Bashford 02.03.2019 05:42

@JackBashford, areas выводит [300, 1800, 1728], поэтому, когда я говорю expect([]).equal([300, 1800, 1728]);, это должно быть прохождение.

Daniel 02.03.2019 05:54

Но areas нигде нет в вашем test файле — вы экспортируете images из index, а не areas.

Jack Bashford 02.03.2019 05:55

@JackBashford, я тоже пробовал, но все равно получаю AssertionError.

Daniel 02.03.2019 05:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
4
2 094
1

Ответы 1

Ошибка связана с используемым вами методом Chai. Чай.равный выполняет сравнение идентичности между двумя массивами (===). Поскольку два массива не являются одним и тем же точным объектом в памяти, он всегда будет терпеть неудачу, даже если содержимое одинаково. Вам нужен Чай.eql, который выполняет глубокое сравнение всех значений.

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

Тейлор, ваши рассуждения имеют смысл, но я все равно получаю AssertionError, даже если я меняю equal на eql. Я говорю, что пустой массив должен равняться [300, 1800, 1728], как только forEach исчерпает себя.

Daniel 02.03.2019 05:56

Проблема в том, что у test.js нет доступа к переменной areas. Он объявлен внутри index.js и не экспортируется. Вы также сравниваете буквальный пустой массив [] с непустым массивом. Вы должны экспортировать areas, а затем изменить [] на areas после того, как вы изменили const images на const areas.

Taylor Glaeser 02.03.2019 06:00

Другие вопросы по теме