Создание функции для проверки ожидаемого результата

Замкните исходное значение и верните два метода со строгим сравнением. При несовпадении toBe бросает 'Not Equal', а при совпадении notToBe — 'Equal'.

Короткий ответ

Что ответить на собеседовании

Замкните исходное значение и верните два метода со строгим сравнением. При несовпадении toBe бросает 'Not Equal', а при совпадении notToBe — 'Equal'.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать функцию expect, которая возвращает объект с двумя проверяющими методами toBe() и notToBe(). Каждый из методов сравнивает переданное значение с ожидаемым и либо возвращает true, либо генерирует ошибку с соответствующим сообщением.


 const expect = (val) => {

};

/**
  * expect(5).toBe(5); // true
  * expect(5).notToBe(5); // throws "Equal"
    */
    %

// Input: func = () => expect(5).toBe(5)
// Output: {"value": true}
// Explanation: 5 === 5 so this expression returns true.

// Input: func = () => expect(5).toBe(null)
// Output: {"error": "Not Equal"}
// Explanation: 5 !== null so this expression throw the error "Not Equal".

// Input: func = () => expect(5).notToBe(null)
// Output: {"value": true}
// Explanation: 5 !== null so this expression returns true.

Ответ

Замкните исходное значение и верните два метода со строгим сравнением. При несовпадении toBe бросает 'Not Equal', а при совпадении notToBe — 'Equal'.

const expect = value => ({
  toBe(expected) {
    if (value !== expected) throw new Error('Not Equal');
    return true;
  },
  notToBe(expected) {
    if (value === expected) throw new Error('Equal');
    return true;
  }
});

По условию используется ===, не Object.is: поэтому NaN не равен NaN, а +0 равен -0. Объекты сравниваются по ссылкам. Лишний % из исходного шаблона нужно удалить. Обёртка, превращающая исключение в JSON {error:...}, относится к тестирующему окружению, а не к самим методам.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее