Замкните исходное значение и верните два метода со строгим сравнением. При несовпадении 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:...}, относится к тестирующему окружению, а не к самим методам.