문제

Write a function expect that helps developers test their code. It should take in any value val and return an object with the following two functions.

  • toBe(val) accepts another value and returns true if the two values === each other. If they are not equal, it should throw an error "Not Equal".
  • notToBe(val) accepts another value and returns true if the two values !== each other. If they are equal, it should throw an error "Equal".

https://leetcode.com/problems/to-be-or-not-to-be/

 

예시

toBe()의 경우 expect의 인자와 toBe의 인자를 비교하여 같으면 true를 반환하고, 같지 않으면 "Not Equal"이라는 에러를 발생시킨다.

notToBe()의 경우 expect의 인자와 notToBe의 인자를 비교하여 다르면 true를 반환하고, 같으면 "Eqaul"이라는 에러를 발생시킨다.

 

코드

/**
 * @param {string} val
 * @return {Object}
 */
var expect = function(val) {
    
    // 같은지 여부를 비교하는 함수
    const isEqual = (val, target) => {
        return val === target;
    }
    
    const ERROR_MESSAGE = {
        TO_BE: "Not Equal",
        NOT_TO_BE: "Equal",
    }

    return {
        toBe: function (target){
            if(isEqual(val, target)) return true;
            throw new Error(ERROR_MESSAGE.TO_BE);
        },
        notToBe: function (target){
            if(!isEqual(val, target)) return true;
            throw new Error(ERROR_MESSAGE.NOT_TO_BE);
        },
    }
};

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

isEqual() 함수로 이용해 expect()로 들어온 인자와 toBe() 혹은 notToBe에 들어온 인자가 같은지를 비교한다. 또한, 에러 메시지를 상수로 빼서 따로 저장하였다. 리턴하는 객체에서 toBe 메서드의 경우 isEqual일 때 true를 리턴하도록 하였고, notToBe 메서드의 경우 isEqual이 아닐 때 true를 리턴하도록 하였다.

728x90

+ Recent posts