Jest: λͺ¨μ˜ λͺ¨λ“ˆμ€ node_modules보닀 μš°μ„  μˆœμœ„κ°€ λ†’μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2016λ…„ 10μ›” 13일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: facebook/jest

_κΈ°λŠ₯_을 μš”μ²­ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? μ•„λ‹ˆλ©΄ _버그_λ₯Ό λ³΄κ³ ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?
버그λ₯Ό λ³΄κ³ ν•©λ‹ˆλ‹€.

ν˜„μž¬ 행동은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?
ν”„λ‘œμ νŠΈμ— λͺ¨μ˜κ°€ μžˆλŠ” λ‚΄λΆ€ 파일과 이름이 같은 λͺ¨λ“ˆμ— λŒ€ν•œ 쒅속성이 μžˆλŠ” 경우 ν•΄λ‹Ή λͺ¨μ˜ κ΅¬ν˜„μ€ μ „μ—­ λͺ¨λ“ˆ λŒ€μ‹  μ „μ—­ λͺ¨λ“ˆμ˜ μš”μ²­μ— λŒ€ν•΄ κ²€μƒ‰λ˜λ―€λ‘œ λͺ…μ‹œμ  λͺ¨μ˜ ν•΄μ œκ°€ ν•„μš”ν•©λ‹ˆλ‹€. ν–‰λ™μ˜ μ‹€μ§ˆμ μΈ λ³€ν™”λ₯Ό λ‚˜νƒ€λƒ„).

ν˜„μž¬ λ™μž‘μ΄ 버그인 경우 μž¬ν˜„ν•˜λŠ” 단계λ₯Ό μ œκ³΅ν•˜κ³  κ°€λŠ₯ν•œ 경우 GitHub에 npm install 및 npm test ν•  수 μžˆλŠ” μ΅œμ†Œ μ €μž₯μ†Œλ₯Ό μ œκ³΅ν•˜μ‹­μ‹œμ˜€.

  1. https://github.com/ticky/jest-mock-bug , npm install 쒅속성 볡제
  2. npm test

μ „μ—­ λͺ¨λ“ˆ( with no explicit opt-out β€Ί globalPad should not be a mock function )을 κ°€μ Έμ˜¬ 수 μžˆμ„ κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜λŠ” ν…ŒμŠ€νŠΈλŠ” λ°˜ν™˜λœ λͺ¨λ“ˆμ΄ μ‹€μ œλ‘œ μˆ˜λ™ λͺ¨μ˜μ΄κΈ° λ•Œλ¬Έμ— μ‹€νŒ¨ν•©λ‹ˆλ‹€.

( left-pad λŠ” 컴파일 μš”κ΅¬ 사항이 μ—†λŠ” μž‘μ€ λͺ¨λ“ˆμ΄λ―€λ‘œ μ—¬κΈ°μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.)

μ˜ˆμƒλ˜λŠ” λ™μž‘μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?

import 문은 explicit-opt-out.js μ—μ„œμ™€ 같이 μ „μ—­ λͺ¨λ“ˆμ„ λ°˜ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

--debug Jestλ₯Ό λ‹€μ‹œ μ‹€ν–‰ν•˜κ³  인쇄할 전체 ꡬ성을 μ œκ³΅ν•©λ‹ˆλ‹€.

jest version = 16.0.1
test framework = jasmine2
config = {
  "rootDir": "/Users/jessica/Repositories/jest-mock-bug",
  "name": "-Users-jessica-Repositories-jest-mock-bug",
  "setupFiles": [],
  "testRunner": "/Users/jessica/Repositories/jest-mock-bug/node_modules/jest-jasmine2/build/index.js",
  "scriptPreprocessor": "/Users/jessica/Repositories/jest-mock-bug/node_modules/babel-jest/build/index.js",
  "usesBabelJest": true,
  "automock": false,
  "bail": false,
  "browser": false,
  "cacheDirectory": "/var/folders/rl/98bml8qx57n3b6xgsgyvbxtr0000gn/T/jest",
  "clearMocks": false,
  "coveragePathIgnorePatterns": [
    "/node_modules/"
  ],
  "coverageReporters": [
    "json",
    "text",
    "lcov",
    "clover"
  ],
  "globals": {},
  "haste": {
    "providesModuleNodeModules": []
  },
  "mocksPattern": "__mocks__",
  "moduleDirectories": [
    "node_modules"
  ],
  "moduleFileExtensions": [
    "js",
    "json",
    "jsx",
    "node"
  ],
  "moduleNameMapper": {},
  "modulePathIgnorePatterns": [],
  "noStackTrace": false,
  "notify": false,
  "preset": null,
  "preprocessorIgnorePatterns": [
    "/node_modules/"
  ],
  "resetModules": false,
  "testEnvironment": "jest-environment-jsdom",
  "testPathDirs": [
    "/Users/jessica/Repositories/jest-mock-bug"
  ],
  "testPathIgnorePatterns": [
    "/node_modules/"
  ],
  "testRegex": "(/__tests__/.*|\\.(test|spec))\\.jsx?$",
  "testURL": "about:blank",
  "timers": "real",
  "useStderr": false,
  "verbose": null,
  "watch": false,
  "cache": true,
  "watchman": true,
  "testcheckOptions": {
    "times": 100,
    "maxSize": 200
  }
}

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

예, μˆ˜λ™ λͺ¨μ˜κ°€ λ…Έλ“œ λͺ¨λ“ˆλ³΄λ‹€ μš°μ„ ν•©λ‹ˆλ‹€. μˆ˜λ™ λͺ¨μ˜ μ‹œμŠ€ν…œμ€ μ•½κ°„ μŠ€μΌ€μΉ˜μ μž…λ‹ˆλ‹€. ν˜„μž¬λ‘œμ„œλŠ” λ‹€μŒ λ¦΄λ¦¬μŠ€μ—μ„œ κ²½κ³ λ₯Ό μ œκ±°ν•˜κ³  μžˆμœΌλ―€λ‘œ jest.unmock('left-pad') 있으면 λ©λ‹ˆλ‹€. #2022 μ°Έμ‘°

μš°λ¦¬κ°€ 가지고 있던 ν•œ 가지 μ•„μ΄λ””μ–΄λŠ” μˆ˜λ™ λ…Έλ“œ λͺ¨λ“ˆ λͺ¨μ˜λ₯Ό μœ„ν•œ λ³„λ„μ˜ μ‹œμŠ€ν…œμ„ λ§Œλ“œλŠ” κ²ƒμ΄μ—ˆμ§€λ§Œ μ΄λŠ” λ³„λ„μ˜ μ œμ•ˆμ—μ„œ λ…Όμ˜λ˜μ–΄μ•Ό ν•  κ²ƒμ΄λ―€λ‘œ 이 문제λ₯Ό λ§ˆλ¬΄λ¦¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

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

이 κ²½μš°κ°€ λ‚΄ ν”„λ‘œμ νŠΈμ—μ„œ λ°œμƒν•˜λŠ” 것과 μœ μ‚¬ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

제 κ²½μš°μ—λŠ” <rootDir>/__mocks__/left-pad.js μžˆμŠ΅λ‹ˆλ‹€. left-pad λ₯Ό κ°€μ Έμ˜€λŠ” λͺ¨λ“  ν…ŒμŠ€νŠΈλŠ” jest.mock('left-pad') λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•˜μ§€ μ•Šλ”λΌλ„ 쑰둱된 left-pad λ₯Ό μžλ™μœΌλ‘œ κ°€μ Έμ˜΅λ‹ˆλ‹€.

ν˜„μž¬ ν•΄κ²° 방법은 λͺ…μ‹œμ μœΌλ‘œ λͺ¨μ˜ν•œ λ‹€μŒ λͺ…μ‹œμ μœΌλ‘œ λͺ¨μ˜ ν•΄μ œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μΆ”μ•…ν•˜μ§€λ§Œ μž‘λ™ν•©λ‹ˆλ‹€

jest.mock('left-pad');
jest.unmock('left-pad');

μ•„ν•˜, κ³ λ§ˆμ›Œ! 그것은 λ‚΄ 것보닀 더 κΉ¨λ—ν•œ ν•΄κ²° λ°©λ²•μ΄μ§€λ§Œ μ—¬μ „νžˆ μ΄μƒμ μ΄μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€!

예, μˆ˜λ™ λͺ¨μ˜κ°€ λ…Έλ“œ λͺ¨λ“ˆλ³΄λ‹€ μš°μ„ ν•©λ‹ˆλ‹€. μˆ˜λ™ λͺ¨μ˜ μ‹œμŠ€ν…œμ€ μ•½κ°„ μŠ€μΌ€μΉ˜μ μž…λ‹ˆλ‹€. ν˜„μž¬λ‘œμ„œλŠ” λ‹€μŒ λ¦΄λ¦¬μŠ€μ—μ„œ κ²½κ³ λ₯Ό μ œκ±°ν•˜κ³  μžˆμœΌλ―€λ‘œ jest.unmock('left-pad') 있으면 λ©λ‹ˆλ‹€. #2022 μ°Έμ‘°

μš°λ¦¬κ°€ 가지고 있던 ν•œ 가지 μ•„μ΄λ””μ–΄λŠ” μˆ˜λ™ λ…Έλ“œ λͺ¨λ“ˆ λͺ¨μ˜λ₯Ό μœ„ν•œ λ³„λ„μ˜ μ‹œμŠ€ν…œμ„ λ§Œλ“œλŠ” κ²ƒμ΄μ—ˆμ§€λ§Œ μ΄λŠ” λ³„λ„μ˜ μ œμ•ˆμ—μ„œ λ…Όμ˜λ˜μ–΄μ•Ό ν•  κ²ƒμ΄λ―€λ‘œ 이 문제λ₯Ό λ§ˆλ¬΄λ¦¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

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