Jest: Мок-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ node_modules

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 13 ΠΎΠΊΡ‚. 2016  Β·  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

ЗапуститС Jest Π΅Ρ‰Π΅ Ρ€Π°Π· с --debug ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ распСчатаСт.

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 Π±ΡƒΠ΄ΡƒΡ‚ автоматичСски ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΡŽ left-pad хотя я явно Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π» jest.mock('left-pad')

Мой Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ явно издСваСтся Π½Π°Π΄ Π½ΠΈΠΌΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ явно Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ…. Π­Ρ‚ΠΎ нСкрасиво, Π½ΠΎ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

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

Ага, спасибо! Π­Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ чистый ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ, Ρ‡Π΅ΠΌ ΠΌΠΎΠΉ, хотя всС ΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ!

Π”Π°, Ρ€ΡƒΡ‡Π½Ρ‹Π΅ ΠΌΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ модулями ΡƒΠ·Π»Π°. БистСма Ρ€ΡƒΡ‡Π½Ρ‹Ρ… ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ схСматична. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ удаляСм ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ выпускС, поэтому jest.unmock('left-pad') Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ. Π‘ΠΌ. β„– 2022

Одна ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΈΠ΄Π΅ΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ систСму для Ρ€ΡƒΡ‡Π½Ρ‹Ρ… ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΡƒΠ·Π»ΠΎΠ², Π½ΠΎ это, вСроятно, слСдуСт ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ, поэтому я Π·Π°ΠΊΡ€ΠΎΡŽ этот вопрос.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ

Π‘ΠΌΠ΅ΠΆΠ½Ρ‹Π΅ вопросы

paularmstrong picture paularmstrong  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

benmccormick picture benmccormick  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

kentor picture kentor  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

GrigoryPtashko picture GrigoryPtashko  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

mmcgahan picture mmcgahan  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ