Sinon: ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ธ ํ•จ์ˆ˜ ์Šคํ„ฐ๋น™

์— ๋งŒ๋“  2017๋…„ 11์›” 16์ผ  ยท  2์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: sinonjs/sinon

ES ๋ชจ๋“ˆ์„ ์กฐ๋กฑํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด getEventByEventId๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

import getEventByEventId from '../queries/getEventByEventId';

export default async (
  {
    connection,
    session
  }: ResolverContextType
) => {
  if (!session || !session.userId) {
    throw new Error('User must be authenticated.');
  }

  const event = await getEventByEventId(connection, eventId);

  // ..
}

๋‚ด ํ…Œ์ŠคํŠธ์—์„œ getEventByEventId๋ฅผ ์กฐ๋กฑํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด

import test from 'ava';
import sinon from 'sinon';
import moment from 'moment';
import createReservation from '../../../src/mutators/createReservation';

test('throws an error if the event is in the past', async (t) => {
  const parameters: any = {};

  const context: any = {
    session: {
      userId: 1
    }
  };

  const stub = sinon.stub().returns({
    date: moment().format('YYYY-MM-DD'),
    time: moment(new Date().getTime() - 1000 * 60).format('HH:mm')
  });

  // How to use the stub to mock `getEventByEventId`?

  await t.throws(createReservation(context), 'Cannot create a reservation for a past event.');
});

์ด๊ฒƒ์€ https://github.com/sinonjs/sinon/issues/1358 ์ด์ „์— ์งˆ๋ฌธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ https://github.com/sinonjs/sinon/issues/1121 ์˜ ๋ณต์ œ๋ณธ์œผ๋กœ ์ž˜๋ชป ๋‹ซํ˜”์ง€๋งŒ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์ด๋ฏธ ๊ทธ ๋ฌธ์ œ์—์„œ ์–ธ๊ธ‰๋˜์—ˆ์ง€๋งŒ ๋” ์ด์ƒ ๋Œ๋ณด์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  2 ๋Œ“๊ธ€

Sinon.JS๋Š” ๋ชจ๋“ˆ ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‹ซ๋Š”๋‹ค.

๊ณ„์†ํ•ด์„œ ๋“ค์–ด์˜ค๋Š” ๋งŽ์€ ์š”์ฒญ๊ณผ ํ”„๋กœ์ ํŠธ ์ŠคํŠœ์–ด๋“œ๋„ ์ƒ๊ณ„๋ฅผ ์œ„ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” CommonJS์™€ ์—ฐ๊ฒฐ ์ด์Œ์ƒˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ถœํŒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์ง€ํ•˜๊ณ  Sinon.JS ์‚ฌ์šฉ์ž ๋ฉ”์ผ๋ง ๋ชฉ๋ก ๋˜๋Š” StackOverflow ์—์„œ ์‚ฌ์šฉ ์งˆ๋ฌธ์„ ํ•˜๋„๋ก ๋„์™€์ฃผ์„ธ์š”. ๋‘˜ ๋‹ค ๋” ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

@sebakerckhof ์ฒดํฌ์•„์›ƒ https://github.com/sinonjs/sinon/issues/562#issuecomment -399090111

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰