๊ณต์‹ ๋ฌธ์„œ: https://jestjs.io/docs/expect#reference


๐ŸŽฏ 1. Expect

๐Ÿ’ก ๊ฐœ๋…

expect()๋Š” ํ…Œ์ŠคํŠธํ•  ์‹ค์ œ ๊ฐ’(actual) ์„ ๊ฐ์‹ธ๋Š” ํ•จ์ˆ˜๋‹ค.
์ด ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Expectation ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ด ๊ฐ์ฒด์—๋Š” ์—ฌ๋Ÿฌ ๋งค์ฒ˜(Matcher) ๋ฉ”์„œ๋“œ์™€ ์ˆ˜์ •์ž(Modifier) ์†์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.





๐Ÿงฉ 2. Matcher

๐Ÿ’ก ๊ฐœ๋…

Matcher๋Š” expect()๊ฐ€ ๋ฐ˜ํ™˜ํ•œ Expectation ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋กœ,
์‹ค์ œ ๊ฐ’(actual)๊ณผ ๊ธฐ๋Œ€ ๊ฐ’(expected)์„ ๋น„๊ต(Assertion)ํ•œ๋‹ค.

expect(2 + 2).toBe(4);
  • expect(2 + 2) โ†’ ์‹ค์ œ ๊ฐ’(4)์„ ๊ฐ์‹ผ Expectation ๊ฐ์ฒด
  • .toBe(4) โ†’ Matcher ๋ฉ”์„œ๋“œ, ์‹ค์ œ ๊ฐ’๊ณผ ๊ธฐ๋Œ€๊ฐ’ ๋น„๊ต ์ˆ˜ํ–‰

์กฐ๊ฑด์ด ๋งž์ง€ ์•Š์œผ๋ฉด Jest๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํŒจ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.





๐Ÿง  3. Modifier

๐Ÿ’ก ๊ฐœ๋…

Modifier(์ˆ˜์ •์ž) ๋Š” ๋งค์ฒ˜์˜ ๋™์ž‘์„ ๋ฐ”๊พธ๋Š” ๋ณด์กฐ ์†์„ฑ์ด๋‹ค.
๋งค์ฒ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์ฒด์ธ์œผ๋กœ ๋ถ™์—ฌ์„œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

Modifier์„ค๋ช…์˜ˆ์‹œ
.not๋งค์ฒ˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜๋Œ€๋กœ ๋’ค์ง‘์Œexpect(3 + 2).not.toBe(6)
.resolvesPromise๊ฐ€ resolve๋  ๋•Œ ๊ฒฐ๊ณผ ๊ฒ€์ฆawait expect(Promise.resolve('ok')).resolves.toBe('ok')
.rejectsPromise๊ฐ€ reject๋  ๋•Œ ์—๋Ÿฌ ๊ฒ€์ฆawait expect(Promise.reject(new Error('fail'))).rejects.toThrow('fail')





๐Ÿงฉ 4. ์ „์ฒด ๊ตฌ์กฐ ์š”์•ฝ

expect(value)
   โ†“
Expectation ๊ฐ์ฒด
   โ”œโ”€โ”€ .toBe()        โ†’ Matcher
   โ”œโ”€โ”€ .toEqual()     โ†’ Matcher
   โ”œโ”€โ”€ .toContain()   โ†’ Matcher
   โ”œโ”€โ”€ .not           โ†’ Modifier
   โ”œโ”€โ”€ .resolves      โ†’ Modifier
   โ””โ”€โ”€ .rejects       โ†’ Modifier





โš™๏ธ 5. ๋‚ด๋ถ€ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ (ํ•™์Šต์šฉ ์˜ˆ์‹œ)

์•„๋ž˜ ์˜ˆ์‹œ๋Š” Jest์˜ ์‹ค์ œ ๊ตฌ์กฐ๋ฅผ ๋‹จ์ˆœํ™”ํ•œ ๊ฐœ๋…์  ๋ชจ๋ธ์ด๋‹ค.
๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ํ›จ์”ฌ ๋ณต์žกํ•˜์ง€๋งŒ, ์ „์ฒด ํ๋ฆ„์€ ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค ๐Ÿ‘‡

function expect(actualValue) {
  return {
    // โœ… ๋งค์ฒ˜๋“ค
    toBe(expected) {
      if (actualValue !== expected) {
        throw new Error(`โŒ Expected ${actualValue} to be ${expected}`);
      }
    },

    toEqual(expected) {
      const isEqual = JSON.stringify(actualValue) === JSON.stringify(expected);
      if (!isEqual) {
        throw new Error(
          `โŒ Expected ${JSON.stringify(actualValue)} to equal ${JSON.stringify(
            expected
          )}`
        );
      }
    },

    toContain(expected) {
      if (!actualValue.includes || !actualValue.includes(expected)) {
        throw new Error(`โŒ Expected ${actualValue} to contain ${expected}`);
      }
    },

    // ๐Ÿšซ ๋ถ€์ • Modifier
    not: {
      toBe(expected) {
        if (actualValue === expected) {
          throw new Error(`โŒ Expected ${actualValue} not to be ${expected}`);
        }
      },
      toContain(expected) {
        if (actualValue.includes && actualValue.includes(expected)) {
          throw new Error(
            `โŒ Expected ${actualValue} not to contain ${expected}`
          );
        }
      },
    },

    // ๐Ÿ”„ ๋น„๋™๊ธฐ Modifier
    resolves: {
      async toBe(expected) {
        const resolved = await actualValue;
        if (resolved !== expected) {
          throw new Error(
            `โŒ Expected Promise to resolve to ${expected}, but got ${resolved}`
          );
        }
      },
    },

    rejects: {
      async toThrow(expectedMessage) {
        try {
          await actualValue;
          throw new Error(
            `โŒ Expected Promise to reject, but it resolved successfully`
          );
        } catch (error) {
          if (!error.message.includes(expectedMessage)) {
            throw new Error(
              `โŒ Expected rejection message to include "${expectedMessage}", but got "${error.message}"`
            );
          }
        }
      },
    },
  };
}

์ด ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ ํ๋ฆ„์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ณด์ธ๋‹ค ๐Ÿ‘‡

  • expect() โ†’ Expectation ๊ฐ์ฒด ์ƒ์„ฑ
  • .toBe(), .toEqual(), .toContain() โ†’ Matcher ๋ฉ”์„œ๋“œ๋“ค
  • .not, .resolves, .rejects โ†’ Modifier ์†์„ฑ๋“ค





โœ… 6. ํ•ต์‹ฌ ์ •๋ฆฌ ํ‘œ

๊ฐœ๋…์—ญํ• ํ˜•ํƒœ๋‚ด๋ถ€ ๋™์ž‘
Expectํ…Œ์ŠคํŠธํ•  ๊ฐ’์„ ๊ฐ์‹ธ๊ณ  Expectation ๊ฐ์ฒด ๋ฐ˜ํ™˜ํ•จ์ˆ˜return new Expectation(actual)
Matcher์‹ค์ œ ๊ฐ’ vs ๊ธฐ๋Œ€ ๊ฐ’ ๋น„๊ต๋ฉ”์„œ๋“œ์‹คํŒจ ์‹œ throw Error
Modifier๋งค์ฒ˜ ๋™์ž‘ ๋ณ€๊ฒฝ (not / resolves / rejects)ํ”„๋กœํผํ‹ฐ๋‚ด๋ถ€ ํ”Œ๋ž˜๊ทธ๋‚˜ ์ฒด์ธ ๊ตฌ์กฐ๋กœ ๋งค์ฒ˜์˜ ๊ฒฐ๊ณผ ์ˆ˜์ •





๐Ÿงญ 7. ํ•œ ๋ฌธ์žฅ ์š”์•ฝ

Jest์˜ ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ๋Š”
expect() โ†’ (modifier) โ†’ matcher
ํ˜•ํƒœ์˜ ์ฒด์ธํ˜• ๊ฒ€์ฆ(Assertion Chain) ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.


profile
1.01^365

0๊ฐœ์˜ ๋Œ“๊ธ€