Jest: κΈ€λ‘œλ²Œ beforeAll

에 λ§Œλ“  2017λ…„ 06μ›” 15일  Β·  36μ½”λ©˜νŠΈ  Β·  좜처: facebook/jest

κΈ€λ‘œλ²Œ beforeAll에 λŒ€ν•œ 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

각 ν…ŒμŠ€νŠΈ νŒŒμΌμ—μ„œ beforeAll을 μ •μ˜ν•  수 μžˆμ§€λ§Œ 이것은 각 ν…ŒμŠ€νŠΈ νŒŒμΌμ— λŒ€ν•΄ beforeAll을 ν•œ 번 μ‹€ν–‰ν•©λ‹ˆλ‹€.

ν•œ 번 μ‹€ν–‰λ˜κ³  첫 번째 ν…ŒμŠ€νŠΈκ°€ μ‹œμž‘λ˜κΈ° 전에 μ™„λ£Œλ˜λŠ” μ „μ—­ beforeAll이 μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ „μ—­ μ„€μ •μ˜ 경우 +1μž…λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬μš©μžμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μ•±/DBλ₯Ό ν•œ 번만 μ„€μ •ν•˜κ³  ν•΄μ œν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  36 λŒ“κΈ€

setupFiles λ₯Ό λ³΄μ…¨μŠ΅λ‹ˆκΉŒ?

참고둜 λ‚΄ ν”„λ‘œμ νŠΈλŠ” λ‹€μŒκ³Ό 같이 setupFiles λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

package.json

{
  "jest": {
    "setupFiles": [
      "./private/mocks/runtime.js"
    ]
  }
}

./private/mocks/runtime.js

global.__meteor_runtime_config__ = {ROOT_URL: 'localhost'};

참고둜 μŠ€νƒ μ˜€λ²„ν”Œλ‘œλŠ” 이런 μ’…λ₯˜μ˜ μ§ˆλ¬Έμ— 더 적합할 수 μžˆμŠ΅λ‹ˆλ‹€. (버그 리포트/κΈ°λŠ₯ μš”μ²­ λŒ€μ‹  μ‚¬μš©μ— λŒ€ν•œ 질문).

λ˜ν•œ λ‚˜λŠ” 이 문제의 ꡬ독을 μ·¨μ†Œν–ˆμœΌλ―€λ‘œ νšŒμ‹ ν•΄λ„ μ•Œλ¦Όμ„ 받지 μ•ŠμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” create-react-app을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
각 ν…ŒμŠ€νŠΈ νŒŒμΌμ— λŒ€ν•΄ setupFilesκ°€ λ‹€μ‹œ μ‹€ν–‰λ©λ‹ˆλ‹€.

μ˜³μ§€ μ•Šμ€ λŒ€λ‹΅μ„ ν•˜κ³  κ·Έ 뒀에 문제λ₯Ό λ‹«μŠ΅λ‹ˆλ‹€. 브라보!

@cpojer @ashtonsix λ‚˜λŠ” 이것이 λ‹«ν˜€μ•Όν•˜κ³  λŒ€λ‹΅μ΄ μ •ν™•ν•˜μ§€ μ•Šλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€ setupFiles λ˜λŠ” setupTestFrameworkScriptFile λͺ¨λ‘ 각 ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈμ— λŒ€ν•΄ μ‹€ν–‰λ˜λ―€λ‘œ "μ „μ—­"이 μ—†μŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ μ„€μ •ν•  μˆ˜μžˆλŠ” 곳은 ν…ŒμŠ€νŠΈν•˜κΈ° 전에 ν…ŒμŠ€νŠΈ dbλ₯Ό μ²­μ†Œν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.

package.json에 pretest λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆκΉŒ?

@ Negan1911 - μ•„λ§ˆλ„, ν•˜μ§€λ§Œ OPμ—μ„œ μ˜λ―Έν•˜λŠ” λ°”λ₯Ό λ§ν•˜κΈ°λŠ” μ–΄λ ΅μŠ΅λ‹ˆλ‹€. μœ μš©ν•œ κΈ°λŠ₯이라고 μƒκ°ν•˜κ³  이 κΈ°λŠ₯ μš”μ²­μ„ 보닀 λͺ…ν™•ν•˜κ²Œ ν•˜κ³  μ‹Άλ‹€λ©΄ 두 번째 문제λ₯Ό λ§Œλ“œλŠ” 것을 κ³ λ €ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

@cpojer @ashtonsix λ‚΄κ°€ μ˜¬λ°”λ₯΄κ²Œ μ΄ν•΄ν–ˆλ‹€λ©΄ ν˜„μž¬ Mochaμ—μ„œ λ…Όμ˜λœ κ²ƒμ²˜λŸΌ μ „μ—­ μ„€μ • 및 λΆ„ν•΄λ₯Ό ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
λ‚˜(그리고 μ•„λ§ˆλ„ OP)κ°€ 가지고 μžˆλŠ” 유슀 μΌ€μ΄μŠ€λŠ” μ„œλ²„λ₯Ό μ‹€ν–‰ν•œ λ‹€μŒ λͺ¨λ“  톡합 ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜κ³  μ‹Άλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.
이λ₯Ό μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μ‘°μ–Έμ΄λ‚˜ λͺ¨λ²” 사둀가 μžˆμŠ΅λ‹ˆκΉŒ?
λ‚΄κ°€ 찾은 것은 μ‚¬λžŒλ“€μ΄ 주둜 μ„œλ²„λ₯Ό μ‹œμž‘ν•˜κ³  "둜컬" beforeAll/afterAll의 각 ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈμ— λŒ€ν•΄ μ„œλ²„λ₯Ό λ‹«μœΌλΌκ³  λ§ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€(예: @kentcdodds ). ν•˜μ§€λ§Œ λ§Žμ€ 쀑볡을 μ•”μ‹œν•©λ‹ˆλ‹€.

μ „μ—­ 섀정에 +1, λ‚΄ μ‚¬μš© μ‚¬λ‘€μ—μ„œλŠ” ν”„λ‘μ‹œ μ„œλ²„λ„ μ‹€ν–‰ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

κ°€μΉ˜κ°€ μžˆλŠ” @ashtonsix , 제 μƒκ°μ—λŠ” OPκ°€ λͺ…ν™•ν–ˆμŠ΅λ‹ˆλ‹€. 이 λ¬Έμ œκ°€ λ‹€μ‹œ μ—΄λ ΈμœΌλ©΄ ν•©λ‹ˆλ‹€.

μ‚¬μš©μž μ •μ˜ jest-environment λ₯Ό λ§Œλ“€κ³  jest-environment-node λ˜λŠ” jest-environment-jsdom λ₯Ό 보고 ν•˜μœ„ λΆ„λ₯˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ›ν•˜λŠ” λ°©μ‹μœΌλ‘œ ν™˜κ²½μ„ μ„€μ •ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 이에 λŒ€ν•œ 비동기 후크 좔가에 λŒ€ν•΄μ„œλ„ λ…Όμ˜ν–ˆμœΌλ©° 이에 λŒ€ν•œ PR을 μˆ˜λ½ν•˜κ²Œ λ˜μ–΄ κΈ°μ©λ‹ˆλ‹€.

+1 mochaμ—μ„œ λ‚˜μ˜€λŠ” 농담을 μ‹œλ„ν•˜κ³  μ‹Άμ—ˆκ³  jest-codemods 의 μš©μ΄ν•¨κ³Ό λ¬Έμ„œμ— κΉŠμ€ 인상을 λ°›μ•˜μŠ΅λ‹ˆλ‹€.

각 κ°œλ³„ 파일의 λͺ¨λ“  처음 describe 을 μ‹€ν–‰ν•˜λŠ” 데 λ†€λΌμšΈ μ •λ„λ‘œ 였랜 μ‹œκ°„μ΄ κ±Έλ ΈμŠ΅λ‹ˆλ‹€. 이전 μ£Όμ„μ—μ„œ μ„€λͺ…ν•œ λŒ€λ‘œ 섀정이 νŒŒμΌλ‹Ή ν•œ 번 μ‹€ν–‰λ˜μ–΄ DROP DATABASE , CREATE DATABASE λ“±κ³Ό 같은 λΆˆν•„μš”ν•œ μ‹œκ°„ μ†Œλͺ¨ μž‘μ—…μ΄ 많이 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

λΆˆν–‰νžˆλ„ λ¬Έμ„œμ—λŠ” 이상적이지 μ•Šμ€ node setup.js && jest λ₯Ό μ‹€ν–‰ν•˜λŠ” 것을 μ œμ™Έν•˜κ³ λŠ” λ¬Έμ„œμ— ν•΄κ²° 방법이 μ—†μŠ΅λ‹ˆλ‹€.

μ „μ—­ μ„€μ •μ˜ 경우 +1μž…λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬μš©μžμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μ•±/DBλ₯Ό ν•œ 번만 μ„€μ •ν•˜κ³  ν•΄μ œν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

+1

#4506μ—μ„œ μˆ˜μ •λ¨

λ‹€μŒκ³Ό 같은 농담 μ˜΅μ…˜ globalSetup 및 globalTeardown κ°€ μžˆμŠ΅λ‹ˆλ‹€. https://facebook.github.io/jest/docs/en/configuration.html#globalsetup -λ¬Έμžμ—΄

globalSetup λ₯Ό μ‚¬μš©ν•΄ λ³΄μ•˜μ§€λ§Œ λ‹€μŒ 였λ₯˜κ°€ 계속 λ°œμƒν•©λ‹ˆλ‹€. 이 μ˜΅μ…˜μ΄ @shai32 νŠΈλ¦­μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, λ‚˜λŠ” μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€ 🀣 ...

"jest": "^21.2.1"
 "jest": {
    "globalSetup": "./jest-config.js"
  }



md5-d3a1dcf99642fcf0b9c99c838aadb689



● Validation Warning:

  Unknown option "globalSetup" with value "./jest-setup.js" was found.
  This is probably a typing mistake. Fixing it will remove this message.

  Configuration Documentation:
  https://facebook.github.io/jest/docs/configuration.html

아직 μΆœμ‹œλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. Jest 22λŠ” 이제 μ–Έμ œλ“ μ§€ μˆ˜μ‹ λ©λ‹ˆλ‹€ πŸ™‚

#4506μ—μ„œ μˆ˜μ •λ¨

λ‚˜λŠ” 그것이 거기에 λ§ν¬λ˜μ–΄ μžˆλ‹€λŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ μ°Ύκ³ μžˆλŠ” μ‚¬λžŒμ„ μœ„ν•΄ : https://github.com/facebook/jest/pull/4716

@btav 2 λ²„κ·Έμž…λ‹ˆλ‹€ πŸ˜“

  1. μ§€κΈˆμ€ μ ˆλŒ€ 경둜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ˜λŠ” ("../../../~ root ~")
  2. μœ νš¨μ„± 검사 κ²½κ³ κ°€ 거짓 κΈμ •μž…λ‹ˆλ‹€.

μ—¬κΈ°λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€
μ—­μ‹œ #5093

λ²„κ·ΈλŠ” #5095 #5096으둜 μˆ˜μ •λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ „μ—­ λ³€μˆ˜λ₯Ό μ„€μ •ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? μ‹œλ„ν–ˆμ§€λ§Œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€....이것이 μ˜λ„λœ κ²ƒμž…λ‹ˆκΉŒ?

λ‚΄ μ‚¬μš© μ‚¬λ‘€λŠ” μ „μ—­μ μœΌλ‘œ μ„€μ •ν•˜λ €λŠ” μ‚¬μš©μž 지정 둜그 κΈ°λŠ₯이 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. _setup.test.js μ‹œλ„ν–ˆμ§€λ§Œ μ „μ—­ λ³€μˆ˜κ°€ μ „μ†‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@zwhitchcox λŠ” setupFiles ꡬ성 μ˜΅μ…˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€: https://facebook.github.io/jest/docs/en/configuration.html#setupfiles -array

λ•Œλ‘œλŠ” 비동기 ν•¨μˆ˜λ₯Ό 톡해 μ„€μ •λœ μ „μ—­ λ³€μˆ˜λ₯Ό κ³΅μœ ν•˜λŠ” 것이 μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, globalSetupμ—μ„œ μΈν˜•κ·Ή λΈŒλΌμš°μ €λ₯Ό ν•œ 번 μ„€μ •ν•œ λ‹€μŒ 각 ν…ŒμŠ€νŠΈ/ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈμ—μ„œ μƒˆ νŽ˜μ΄μ§€λ₯Ό μƒμ„±ν•˜λŠ” 것이 μœ μš©ν•  κ²ƒμž…λ‹ˆλ‹€.

@tdenovan 그게 λ°”λ‘œ λ‚΄κ°€ μ§€κΈˆν•˜λ €κ³ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 이전에 λͺ¨μΉ΄λ‘œ ν•΄λ³Έ 적이 μžˆμ–΄μ„œ κ°„λ‹¨ν–ˆμ§€λ§Œ, 농담삼아 λ‹€λ₯Έ 방법을 μ°Ύμ•„μ•Ό ν•  것 κ°™μŠ΅λ‹ˆλ‹€.
이것은 λ‚΄ 농담 κ΅¬μ„±μž…λ‹ˆλ‹€

"jest": {
    "verbose": true,
    "testEnvironment": "node",
    "globalSetup": "<rootDir>/scripts/testSetup.js",
    "globalTeardown": "<rootDir>/scripts/testTeardown.js"
  },
// globalSetup.js
module.exports = async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  bot = Bot(browser, page);
  await bot.goto(bot.baseUrl);
  global.bot = bot;
}

ν•˜μ§€λ§Œ λ‚΄ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ—μ„œ 봇에 μ•‘μ„ΈμŠ€ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

GGWP! 방금 ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

"e2e": "jest --testRegex '.*.e2e.js'"
// globalTeardown.js
module.exports = async () => {
  if (process.testSetup) {
    process.testSetup.bot.close();
  }
}

 process.testSetup = { bot };
// and then im my tests
const { bot } = process.testSetup;

봇이 무엇인지 κΆκΈˆν•΄ ν•˜μ‹œλŠ” λΆ„,

const Bot = (browser, page) => ({
  browser: browser,
  page: page,
  baseUrl: 'http://localhost:4000',
  user: {
    name: faker.name.findName(),
    email: faker.internet.email(),
    password: 'Test<strong i="13">@123</strong>',
  },
  oldUser: {
    email: '[email protected]',
    password: 'Test<strong i="14">@123</strong>',
  },
  clearSession: async () => {
    await page.evaluate(() => sessionStorage.clear());
  },
  goto: async (url) => {
    await page.goto(url);
  },
  clickButton: async (id) => {
    await page.waitForSelector(id);
    await page.click(id);
  },
  checkText: async (expect, id, text) => {
    await page.waitForSelector(id);
    const elText = await page.$eval(id, el => el.innerHTML);
    expect(elText).toContain(text);
  },
  type: async (id, text) => {
    await page.waitForSelector(id);
    await page.$eval(id, el => el.value = '');
    await page.type(id, text);
  },
  wait: async () => {
    await page.waitForNavigation();
  },
  close: () => {
    browser.close();
  },
});

μ›Ήμ‚¬μ΄νŠΈμ— μΈν˜•κ·Ή κ°€μ΄λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€: https://facebook.github.io/jest/docs/en/puppeteer.html

λ„€, ν•˜μ§€λ§Œ 이것은 globalSetup async λ©”μ„œλ“œμ—μ„œ μ „μ—­ 섀정이 κ°€λŠ₯함을 μ•”μ‹œν•©λ‹ˆλ‹€.

@SimenB ah .. man... λ‚˜λŠ” 이것을 μ•Œμ•„λ‚΄λ €κ³  λ…Έλ ₯ν–ˆκ³  λ˜ν•œ κ½€ μ˜€λž«λ™μ•ˆ 농담 λ¬Έμ„œμ— μžˆμ—ˆκ³  κ·Έ μ„Ήμ…˜μ„ κ²°μ½” λˆˆμΉ˜μ±„μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄ μ‹œκ°„ λ‚­λΉ„.

μ—¬λŸ¬ ν…ŒμŠ€νŠΈ λͺ¨μŒμ΄ λ³‘λ ¬λ‘œ μ‹€ν–‰λ˜λŠ” 경우 globalSetupμ—μ„œ μ„€μ •ν•œ μ „μ—­ 개체λ₯Ό μ‚¬μš©ν•  수 μ—†λŠ” λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€(κΈ°λ³Έκ°’). 단일 μ œν’ˆκ΅° ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜κ±°λ‚˜ ν…ŒμŠ€νŠΈλ₯Ό 직렬둜 μ‹€ν–‰ν•˜λ„λ‘ --runInBandλ₯Ό μ„€μ •ν•˜λ©΄ 개체λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν…ŒμŠ€νŠΈκ°€ λ³‘λ ¬λ‘œ μ‹€ν–‰λ˜λŠ” 경우 globalSetupμ—μ„œ μ„€μ •ν•œ λ³€μˆ˜μ— μ•‘μ„ΈμŠ€ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•©λ‹ˆκΉŒ?
μœ„μ—μ„œ μ‚¬μš©ν•œ 예제(ν”„λ‘œμ„ΈμŠ€ 개체 μ‚¬μš©)λ₯Ό μ‹œλ„ν–ˆκ³  μ‚¬μš©μž 지정 TestEnvironmentλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ§€λ§Œ 운이 μ—†λŠ” 버전도 μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€.

const PuppeteerJsdomEnvironment = require('jest-puppe-shots/lib/jsdom-environment');

class JestPuppeShotsEnv extends PuppeteerJsdomEnvironment {

  async setup(config) {
    await super.setup(config);
    const { allThemesCss } = global;

    // make the allThemesCss object available in test suites
    Object.assign(this.global, {
      allThemesCss
    });
  }
}

module.exports = JestPuppeShotsEnv;

이것은 globalSetup.jsμ—μ„œ allThemesCλ₯Ό κ°€μ Έμ˜€κ³  ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈλ‘œ μ „λ‹¬λ˜κ³  μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

@ovidiu-lapadus global λŒ€μ‹  process λ₯Ό μ‚¬μš©ν•˜μ—¬ globalSetup을 μž‘λ™μ‹œν‚¬ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. --runInBand μœ λ¬΄μ— 관계없이 μž‘λ™ν•©λ‹ˆλ‹€. 예

// globalSetup.js
module.exports = async () => {
  process.FOOT = 'BALL';
};
// globalTeardown.js
module.exports = async () => {
  console.log(process.FOOT) // BALL 
};
// some.test.js
it('expects 1 to be 1', () => {
    expect(1).toBe(1);
     console.log(process.FOOT); // BALL
});

그리고 jest νŒ€μ€ global κ°€ ν…ŒμŠ€νŠΈ ( babel-jest 22.2.2 )μ—μ„œ μ •μ˜λ˜μ§€ μ•Šμ•˜μ§€λ§Œ globalTeardown.js μ—μ„œ μ •μ˜λ˜μ—ˆλŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ 버그일 κ²ƒμž…λ‹ˆλ‹€. μ§€κΈˆμ€ process 만 μ‚¬μš©ν•˜κ² μŠ΅λ‹ˆλ‹€. 건배!

κ°μ‚¬ν•©λ‹ˆλ‹€ @cellis 당신은 λ‚΄ ν•˜λ£¨λ₯Ό κ΅¬ν–ˆμŠ΅λ‹ˆλ‹€! global.FOO 이 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 이유λ₯Ό μ΄ν•΄ν•˜λ €κ³  벽에 머리λ₯Ό λΆ€λ”ͺμ³€μŠ΅λ‹ˆλ‹€. process.FOO 이 νŠΈλ¦­μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€ :-)

@kalutheo process.FOOλ₯Ό μ‚¬μš©ν•  λ•Œ λͺ‡ 가지 주의 사항이 μžˆμŠ΅λ‹ˆλ‹€. 첫째, ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” process.envμ—μ„œ 깊이 μ€‘μ²©λœ λ³€μˆ˜λ₯Ό μˆ˜ν–‰ν•  수 μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 전역을 μž‘λ™μ‹œν‚€λŠ” 더 쒋은 방법을 μ°Ύμ•˜μ§€λ§Œ κ²Œμ‹œν•˜κΈ°λ₯Ό 기닀리고 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ ν•œ 것은 jest-environment νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‚˜λ§Œμ˜ dbEnvironment λ₯Ό λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€. κ±°κΈ°μ—μ„œ μ •μ˜ν•  μ „μ—­ dbλ₯Ό ν™•μΈν•˜κ³  그렇지 μ•Šμ€ 경우 μž¬μ •μ˜ν•©λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ ν™˜κ²½μ€ db ν…ŒμŠ€νŠΈμš©μœΌλ‘œλ§Œ μ‹€ν–‰λ˜λ©° ν”„λ‘ νŠΈμ—”λ“œ μ „μš© ν…ŒμŠ€νŠΈμš©μœΌλ‘œ λ‹€λ₯Έ ꡬ성이 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλ ‡κ²Œ ν•˜λ©΄ λͺ¨λ“  ν”„λŸ°νŠΈμ—”λ“œ 변경에 λŒ€ν•΄ db ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” 데 μ‹œκ°„μ„ λ‚­λΉ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‘˜μ§Έ, 항상 ν•«ν•œ μ—¬λŸ¬ "볡제" dbλ₯Ό μ„€μ •ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€. dev db와 ν•¨κ»˜ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κΈ° λ•Œλ¬Έμ— λͺ¨λ“  jest μ‹€ν–‰μ—μ„œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κ±°λ‚˜ 덀프할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. 이것은 λ‚΄κ°€ κ³΅μœ ν•œ μš”μ§€μ— 있음), ν…ŒμŠ€νŠΈλ₯Ό 훨씬 더 λΉ λ₯΄κ²Œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν…ŒμŠ€νŠΈμ—μ„œ μ΅œλŒ€ 병렬성을 얻을 수 μžˆλ„λ‘ μ΄λŸ¬ν•œ 볡제본의 풀을 μ„€μ •ν•©λ‹ˆλ‹€. 그것은 μΌμ’…μ˜ jest λ¬Έμ„œμ— λ¬Έμ„œν™”λ˜μ–΄ μžˆμ§€λ§Œ μΆ©λΆ„νžˆ μ„€λͺ…λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ–΄μ¨Œλ“  μš”μ§€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. https://gist.github.com/cellis/08cc332dacf9a548005e8cf35d4b16e2

@ovidiu-lapadus μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λ©΄ λ¬Έμ œλŠ” 전역을 ν• λ‹Ή ν•˜κΈ° 전에 super.setup() λ₯Ό ν˜ΈμΆœν•œ 것일 수 μžˆμŠ΅λ‹ˆλ‹€. μž‘λ™ν•˜λŠ” μ†”λ£¨μ…˜μ— λŒ€ν•΄μ„œλŠ” μœ„μ— κ²Œμ‹œν•œ μš”μ§€λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

@cellis κ·€μ€‘ν•œ 정보 κ°μ‚¬ν•©λ‹ˆλ‹€. λ‚˜λŠ” 당신이 μ„€λͺ…ν•œ 것과 같은 μ‚¬μš©μž μ •μ˜ ν™˜κ²½μœΌλ‘œ μ‹œλ„ ν•  κ²ƒμž…λ‹ˆλ‹€

μ–˜λ“€ μ•„, globalSetup babel-polyfill 와 κ²°ν•© chai , μš”κ΅¬ jest-extended 와 같은 λͺ¨λ“  heave μž‘μ—…μ„ 여기에 포함해야 ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?
globalSetup λŠ” setupTestFrameworkScriptFile 와 맀우 λ‹€λ₯΄κ²Œ μž‘λ™ν•˜κ³  globalSetup μ—μ„œλŠ” μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.
λ‚˜λŠ” λͺ¨λ“  jest ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ 그의 snadboxed ν™˜κ²½μ—μ„œ μ‹€ν–‰λ˜μ§€λ§Œ setupTestFrameworkScriptFile μ—μ„œ 아무것도 ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨μΉ΄: 9초
Jest: 60초, μ‹œκ³„ λͺ¨λ“œμ—μ„œ: 170-200초

?

process λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 μ•„λ§ˆλ„ 깨질 수 μžˆλŠ” ν•΄ν‚Ήμž…λ‹ˆλ‹€(λ²„κ·Έμž…λ‹ˆλ‹€).

당신은 μ•„λ§ˆλ„ #7184λ₯Ό νŒ”λ‘œμš°ν•˜κ³  싢을 κ²ƒμž…λ‹ˆλ‹€.

이것은 μ§ˆλ¬Έμ— λŒ€ν•œ 전체 beforeAll() κ°€ μ•„λ‹ˆμ§€λ§Œ 이λ₯Ό 톡해 μ½”λ“œ 쀑볡을 μ‰½κ²Œ ν”Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  ν…ŒμŠ€νŠΈ νŒŒμΌμ— λŒ€ν•΄ μ„€μ •ν•  λ…Έλ“œ ν™˜κ²½μ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. https://stackoverflow.com/a/61260044/4934640


μ—…λ°μ΄νŠΈ

globalSetup 에 ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•  수 μžˆλ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. 즉, ν…ŒμŠ€νŠΈ 사둀/suites/files 간에 μ„œλ²„ μ£Όμ†Œλ₯Ό κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. https://github.com/facebook/jest/issues/7184# μ΄μŠˆμ½”λ©˜νŠΈ

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰