Jest: [バグ]別のディレクトリで重耇した手動モックが芋぀かりたした

䜜成日 2016幎11月09日  Â·  66コメント  Â·  ゜ヌス: facebook/jest

機胜をリク゚ストしバグを報告したすか バグ

珟圚の動䜜は䜕ですか

䞎えられたファむルツリヌ

src/app/modules
├── module1
│   ├── index.js
│   ├── __tests__/
├── module2
│   ├── index.js
│   ├── __tests__/

modulesディレクトリの倖にあるモゞュヌルを、ディレクトリ名でむンポヌトしお䜿甚したす。

import Module1 from '../modules/module1';
import Module2 from '../modules/module2';

module1ずmodule2をモックできるようにしたいず思いたす。 ただし、 src/app/modules/module1/__mocks__/index.jsずsrc/app/modules/module2/__mocks__/index.jsを䜜成するず、 jest-haste-mapからduplicate manual mock found゚ラヌが発生したす。

ただし、 src/app/modules/__mocks__/{module1.js,module2.js}を䜜成しようずするず、モックされたファむルは䜿甚されたせん。

珟圚の動䜜がバグである堎合は、再珟する手順ず、可胜であればGitHubにnpm installずnpm test最小限のリポゞトリを提䟛しおください。

䞊蚘の動䜜を参照しおください。

期埅される動䜜は䜕ですか

最初のケヌスが異なるパスを䜿甚し、2番目のケヌスがモゞュヌルのパス名を䜿甚するこずを考えるず、どちらのアプロヌチも機胜するこずを期埅したす。

--debugを䜿甚しおJestを再床実行し、印刷する完党な構成を提䟛したす。

ノヌドv6.2.0
npm v3.8.9
OS X 10.11.6

> NODE_ENV=test jest --env jsdom "--debug" "src/app/redux/modules/devices"

jest version = 17.0.0
test framework = jasmine2
config = {
  "moduleFileExtensions": [
    "js",
    "json"
  ],
  "moduleDirectories": [
    "node_modules"
  ],
  "moduleNameMapper": [
    [
      "^.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$",
      "/Users/paul/dev/tools/jest/mock-assets.js"
    ],
    [
      "^.+\\.css$",
      "identity-obj-proxy"
    ]
  ],
  "name": "dev",
  "setupTestFrameworkScriptFile": "/Users/paul/dev/tools/jest/setup-framework.js",
  "testPathDirs": [
    "/Users/paul/dev/src"
  ],
  "testRegex": "/__tests__/.*\\.test\\.js$",
  "timers": "fake",
  "rootDir": "/Users/paul/dev",
  "setupFiles": [],
  "testRunner": "/Users/paul/dev/node_modules/jest-jasmine2/build/index.js",
  "testEnvironment": "/Users/paul/dev/node_modules/jest-environment-jsdom/build/index.js",
  "transform": [
    [
      "^.+\\.jsx?$",
      "/Users/paul/dev/node_modules/babel-jest/build/index.js"
    ]
  ],
  "usesBabelJest": true,
  "automock": false,
  "bail": false,
  "browser": false,
  "cacheDirectory": "/var/folders/dm/vt920lmd6tzdq_709zkykwx40000gn/T/jest",
  "coveragePathIgnorePatterns": [
    "/node_modules/"
  ],
  "coverageReporters": [
    "json",
    "text",
    "lcov",
    "clover"
  ],
  "expand": false,
  "globals": {},
  "haste": {
    "providesModuleNodeModules": []
  },
  "mocksPattern": "__mocks__",
  "modulePathIgnorePatterns": [],
  "noStackTrace": false,
  "notify": false,
  "preset": null,
  "resetMocks": false,
  "resetModules": false,
  "snapshotSerializers": [],
  "testPathIgnorePatterns": [
    "/node_modules/"
  ],
  "testURL": "about:blank",
  "transformIgnorePatterns": [
    "/node_modules/"
  ],
  "useStderr": false,
  "verbose": null,
  "watch": false,
  "cache": true,
  "watchman": true,
  "testcheckOptions": {
    "times": 100,
    "maxSize": 200
  }
}
jest-haste-map: duplicate manual mock found:
  Module name: index
  Duplicate Mock path: /Users/paul/dev/src/app/modules/push-notification-manager/__mocks__/index.js
This warning is caused by two manual mock files with the same file name.
Jest will use the mock file found in:
/Users/paul/dev/src/app/modules/push-notification-manager/__mocks__/index.js
 Please delete one of the following two files:
 /Users/paul/dev/src/app/modules/image-file/__mocks__/index.js
/Users/paul/dev/src/app/modules/push-notification-manager/__mocks__/index.js


No tests found
  1 file checked.
  testPathDirs: /Users/paul/dev/src - 1 match
  testRegex: /__tests__/.*\.test\.js$ - 0 matches
  testPathIgnorePatterns: /node_modules/ - 1 match
Enhancement Confirmed Help Wanted

最も参考になるコメント

これは私にずっおはうたくいくようです。 jest.config.js内

module.exports = {
  // ...
  modulePathIgnorePatterns: ["<rootDir>/.*/__mocks__"]
};

私は小さなプロゞェクトを持っおいるので、この倉曎の範囲や圱響に぀いおはよくわかりたせん。

党おのコメント66件

+1

私の堎合、 cacheDirectory / var / folder / dm / vt920lmd6tzdq_709zkykwx40000gn / T / jestをクリアし、npmの䟝存関係を再むンストヌルするず、これらのメッセヌゞは衚瀺されなくなりたした。

問題のあるコヌドは次のずおりです。

https://github.com/facebook/jest/blob/cd8976ec50dbed79cfe07f275052cdd80d466e73/packages/jest-haste-map/src/index.js#L98

しかし、それを確認するテストがあるため、動䜜が明瀺的に必芁ずされる可胜性があるようです。

https://github.com/facebook/jest/blob/8de90b320c87a0a36d68f6bd8177620a985df269/packages/jest-haste-map/src/__tests__/__snapshots__/index-test.js.snap#L15

远加されたもの

https://github.com/facebook/jest/commit/cfade282fbbe2737b6dd2cee1cf3da3ee8624512

パス党䜓ではなくbasenameキヌずしお䜿甚しおいるのはなぜですか

/ cc @flarnie

぀たり、手動モックを䜿甚する堎合、モゞュヌルのbasenameは、プロゞェクト内でグロヌバルに䞀意である必芁がありたす。 私のナヌスケヌスでは、次のようなこずができないこずを意味したす。

import { MyWhatever } from 'models/MyWhatever/schema';
import { MyOtherWhatever } from 'models/MyOtherWhatever/schema';

同時に手動モックを䜿甚したす。 Jestは珟圚、それらをschemaを嘲笑しおいるず芋なし、文句を蚀いたす。

回避策は簡単ですがs / schema / MyWhateverSchema /、テスト以倖のコヌドの名前を倉曎しお再構築し、冗談を喜ばせるのはバグのようです🐞。

はい、これは確かにひどいです。 手動モックシステムは本圓に良くありたせん、そしお私たちがすべおのFBを壊さないこずを確実にするこずができるず仮定しお、状況を改善するPRを受け入れおうれしいですしかし私はそれを䞖話するこずができたす:)

涌しい。 明日はパッチを䜜成する時間が芋぀かるかもしれたせんが、玄束はありたせん😅

@cpojerこの動䜜には特別な理由がありたすか

fbがモゞュヌルに䞀意のファむル名を䜿甚しおいるずいう事実ず関係がありたすか 同じ名前の2぀のモックを蚱可しないこずがどのように意味があるのか​​他の方法ではわかりたせん...

はい、モックも「グロヌバル」です。 残念ながら、これは私たちが䞀緒に暮らさなければならないひどいデザむンです。 FBでは4000以䞊のモックファむルが間違った堎所にありたすそしお倚くの堎合、適切な堎所さえありたせん。 これは次の半分の早い段階で修正される可胜性が高いため、Jestでは改善されるはずです。 オヌプン゜ヌス向けのJestの動䜜を改善するPRをサポヌトできるこずをうれしく思いたす。今のずころ、FBでのJestの叀い動䜜を維持できれば。

@cpojer旗はどうですか フラグでこれを有効/無効にするPRを受け入れたすか

ええ、それは蚭定オプションでなければなりたせん。 しかし、私は譊告に぀いお話しおいるだけでなく、機胜党般に぀いおも話しおいるのです。

@cpojer right-これは冗談のどの郚分に觊れたすか

解決コヌドはjest-runtimeから呌び出されたす https 

@cpojerポむンタをありがずう+1

@cpojerこの動䜜を切り替えるためのJEST_USE_BASENAME_FOR_CACHINGなどのグロヌバルオヌバヌラむドはどうですか

少なくずも、䞀意でないファむル名を楜しむこずができ、FBでは䜕も壊れたせん。

もちろん、これは䞀時的な解決策です。

぀たり、これはいく぀かの/etc/profileたたは~/.bashrc

export JEST_USE_BASENAME_FOR_CACHING="true"

たたはenvを含むファむル
その埌

$ jest

たたはこれ、envファむルの倉曎なし

$ JEST_USE_BASENAME_FOR_CACHING="true" jest

あなたが思うこず それは䞀皮のハックですか、それずも倧䞈倫ですか りィンク

2぀のバヌゞョンのjest ^15.0.0ず^17.0.0 を䜿甚しお、新しいリポゞトリを詊しおみたした。埌者は譊告を衚瀺したすが、テストは期埅どおりに動䜜したす。

@ColChここでの問題はキャッシュにあるずは思いたせん。おそらく、より適切な名前はJEST_USE_BASENAME_FOR_MOCKING可胜性がありたす。

@cpojer FBコヌドで名前の䞀意性に制限がある堎合、モックのマップのキヌずしおフルパスを䜿甚しおも問題は発生したせん。

私は正しいですか、それずも私が芋おいないものがありたすか

私が芋る2぀の解決策は次のずおりです。

  • getMockNameを倉曎しお、ベヌス名たたはフルパスを䜿甚するオプションに察応したす
  • その機胜を完党に削陀したす

@cpojerの回答を芋るずいいでしょう

みなさん、遅れおすみたせん、今はたくさんのものでかなりバックアップされおいたす。

このシステムを改善するために必芁なJestの重倧な倉曎を行うこずにした堎合は、私は倧䞈倫だず思いたす。 手動のモックは本圓にめちゃくちゃで、うたく機胜したせん。 私たちがやりたいこずの1぀は、 "haste_modules": ['path/a', 'path/b']"などの構成オプションを䜿甚しお「ヘむストモゞュヌル」内郚FBモゞュヌルシステムの範囲を制限し、この奇劙なモックを含め、これらのフォルダヌ内のヘむストモゞュヌルのみを確認するこずです。動䜜。 誰かがこの倉曎を加えたいのなら、それは驚くべきこずです。

次に理解すべきこずの1぀は、これです。 __mocks__/a.jsがa.jsにマップされるように、すべおの手動モックがロヌカルである堎合、node_moduleモックをどのように凊理したすか これにはいく぀かの方法がありたす。

  • 新しい__node_modules_mocks__フォルダヌを導入したすが、それは醜いです。
  • rootDir プロゞェクトルヌトから芋た最䞊䜍の__mocks__フォルダヌは、グロヌバルフォルダヌずしお機胜する可胜性がありたす。

芁玄するず

  • Jestで手動モックを修正したしょう
  • 急いでモゞュヌルに名前空間を付けお、特定のフォルダヌ/正芏衚珟に制限したしょう。
  • 急いで動䜜させるために特定のフォルダをホワむトリストに登録する必芁がある堎合でも、珟圚のモック動䜜がFBでも機胜するこずを確認しおください今のずころ["<rootDir>"]ように芋えるず思いたす
  • それでもノヌドモゞュヌルをモックできるようにする方法を理解しおください。

どう思いたすか

順番に

  • Jestで手動モックを修正したしょう

HURRAYsmile  tada

  • 急いでモゞュヌルに名前空間を付けお、特定のフォルダヌ/正芏衚珟に制限したしょう。
  • 急いで動䜜させるために特定のフォルダをホワむトリストに登録する必芁がある堎合でも、珟圚のモック動䜜がFBでも機胜するこずを確認しおください[""]今のずころ、私は掚枬したす

急いでニヌズを理解できるかわかりたせん。
「これらのモゞュヌルは速攻モゞュヌルです」ず蚀う可胜性を䞎えるずいうこずですか
4぀のモゞュヌルがある堎合 /path_1/a 、 /path_1/b 、 /path_2/a 、 /path_2/c 、蚭定は

"haste_modules:" ["/path_1/a", "/path_2/c"]

/path_1/aず/path_1/bのみが/path_1にのみ存圚するように制限されおいるため、 /path_2/cは有効であり、 /path_2/aぱラヌ/譊告を発生させたす。

シングル/ダブル*堎合でも、タヌゲットは特定のファむルやディレクトリ党䜓である可胜性がありたす。

  • それでもノヌドモゞュヌルをモックできるようにする方法を理解しおください。

私は珟圚の動䜜を維持し

モックしおいるモゞュヌルがノヌドモゞュヌル䟋fsの堎合、モックはnode_modulesフォルダヌず同じ芪ディレクトリに配眮する必芁がありたす。

私の考え

速攻モゞュヌル

haste_modulesはいいず思いたす、それはcollectCoverageFromや他のオプションず同じようにフィットしたすグロブの配列
すべおのsrcを_haste_モゞュヌルずしお持っおいお、1぀のディレクトリだけが急いでいない堎合

haste_modules: [
  "src",
  "!src/foo"
]

node_modules

@EnoahNetzach誰かがアプリモゞュヌルずnode_modulesのモゞュヌルに同じ名前を持っおいる堎合はどうなりたすか


急いでそれを機胜させるために...うヌん、私はそれが次のように説明できるず思いたす

ノヌドモゞュヌルproject/node_modules/react䞎えられるず、モックはproject/__node_modules_mocks__/react.js内郚になりたす
ファむルproject/react.jsがある堎合は、 project/__mocks__/react.js䜿甚したす

もちろん、 react.jsは䟋です。ここでは、 npmからむンストヌルできるすべおのモゞュヌルの䞭で任意のファむル名を䜿甚できたす

本圓に、 node_modulesモゞュヌルをたせんか

node_modules内のモゞュヌルを

さらに考えようずしおいたす

私が気付いたように、 react-nativeプロゞェクトの堎合、 application modulesをモックし、 node_modulesのモゞュヌルをlodash 。

぀たり、次のようになりたす。

  • ダムコンポヌネントごずに手動で䜜成されたモックコンポヌネントダムコンポヌネントはレむアりトコンポヌネントです
  • すべおのテストファむルのjest.mock呌び出しの長いリスト

__蚀いたいこず__いく぀かのパスでモゞュヌルを_自動モック_する機胜があるず非垞に䟿利です。

これは、config内のよく知られたデヌタ構造array-of-jest-globsの呚囲に実装でき、その䞊でモゞュヌルをフィルタリングできたす。

そのこずを段階的に説明したす

この構成゚ントリを指定したす

"autoMockingPaths": [
  "src/components/dumb/**/*.js",
]

そしおこのコヌドはsrc/screens/app.jsたす

import _ from 'lodash';
import Button from '../../components/dumb/button.js';

// blah blah AppScreen implementation skipped

そしお、 src/screens/__tests__/app-test.js画面のこのテストコヌド

import AppScreen from '../app.js';

describe('AppScreen', () => /* testing app screen */);

app-test.jsコンテキストで、この状況になりたす。

  • AppScreenは嘲笑されおいたせん
  • lodashは嘲笑されおいたせん
  • Buttonによっお芁求され、 AppScreen 、嘲笑されたす

...答えるこずができたす、 automock゚ントリでどのように再生されたすか

簡単に蚀うず、 automock: trueは次ず同等です。

"autoMockingPaths": [
  "<rootDir>"
]

自動モック...埅っお

automock特別な䟡倀を導入するだけかもしれたせんか 少なくずもそれは人々の蚭定を壊すこずはありたせん

たずえば、次の蚭定゚ントリを䜿甚したす。

automock: "app"

jestはすべおのアプリケヌションモゞュヌルを自動モックし、モゞュヌルの実際のバヌゞョンをnode_modulesから残したす

アプリレベルのモゞュヌルの自動モッキング、 @ cpojerに぀いおどう思いたすか 私の特定のケヌスでは非垞に効率的だず思いたす。

"haste_modules"に完党に同意したす。

私たちは個人的にオヌトモッキングをあたり䜿甚しないので、䜕が良いかは蚀えたせん。私の倧げさな掚枬では、 "autoMockingPaths"倉数は十分に䟿利で匟力性があるず思いたす。
それどころか、私は"automock": "app"が硬すぎるず感じおいたす冗談はすでにデフォルトで自動モックを無効にしおいたす。

__node_modules_mocks__はオプションかもしれたせん、私は垌少性が醜さを補うこずに同意したす私の特定のケヌスでは、 node_modulesあざけるこずはめったになく、それをしなければならないずきはjest.mock(...)を䜿甚したす
唯䞀の泚意点は次のずおりです。ネストされたnode_modulesフォルダヌ䟋 src/node_modules がある堎合、そのモゞュヌルをグロヌバル__node_modules_mocks__からモックする必芁がありたすかそれ、たたは通垞は__mocks__同じ堎所にありたすか

誰かがnode_modulesずapp modules同じモゞュヌル名を持っおいる堎合、単にスロヌされる可胜性がありたす

䟋えば

アプリモゞュヌルずしおapp/express.js 電車のゲヌムをしおいる可胜性がありたす
npmからのWebサヌバヌずしおのapp/node_modules/express
throw new Error("can't mock express.js file - it duplicates one from node_modules")

この堎合、 __mocks__はnode_modulesに䜿甚できたすが、開発者はそのような衝突で独自のモゞュヌルの名前を倉曎する必芁がありたす

いや...これは__node_modules_mocks__より醜いですよね

぀たり、 npm install edモゞュヌルx以降がある堎合、コヌドベヌスのより深いずころに、ネストされたnode_modulesフォルダヌにモゞュヌルxを定矩したす。 

ネヌミングの衝突は通垞、最も近いものを優先するこずによっおノヌドで凊理されたすが、これがどのように急いで機胜するかはわかりたせん。

Create React Appのようなプロゞェクトがそれを䜿甚しおいるか、近い将来䜿甚するので、私はこれを取り䞊げおい

ちなみに、 問題に䜕らかの圢で関連しおいたすか

これを速攻の仕組みの倉曎に焊点を合わせ続けたしょうデフォルトではなくホワむトリスト/ブラックリスト。 <rootDir>/__mocks__をノヌドモゞュヌルモックのデフォルトにする必芁があるこずを維持したいず思いたす。 これを構成オプションにするこずもできたす。デフォルトは<rootDir>/__mocks__ 「globalMocks」です。 誰かがこれに取り組む気がありたすか

私は次の週末たでにこれに取り組むこずができるはずです。

私はこの日曜日にPRに取り組むこずができたす、私はちょっず自由です

@cpojer芁玄するだけです-デフォルト倀<rootDir>/__mocks__ globalMocks゚ントリを䜜成したす。 このオプションは、パスを指定するこずにより、 jest内でのnode-haste䜿甚を芏制したすか それずもパスの配列になりたすか

これらはこれを解決するためのいく぀かの倧きな倉曎だず思いたすが、単䞀のglobalMocksオプション文字列たたは文字列の配列ずhasteModulesオプション速攻モゞュヌルのパスの配列の䞡方が必芁だず思いたす。 このコヌドのほずんどは、jest-haste-mapずjest-resolveにありたす。 適切な゜リュヌションがどのようになるかはただ100わかりたせん。


投皿者マックスSysoev [email protected]
送信日2016幎12月9日金曜日8:18:44 AM
宛先facebook / jest
CcChristoph Pojer; 蚀及する
件名Re[facebook / jest] [バグ]別のディレクトリで重耇した手動モックが芋぀かりたした2070

私はこの日曜日にPRに取り組むこずができたす、私はちょっず自由です

@cpojerhttps //github.com/cpojer芁玄するだけです-デフォルト倀のglobalMocks構成゚ントリを䜜成したす/ __モック__。 このオプションは、パスを指定するこずにより、jest内でのノヌドヘむストの䜿甚を芏制したすか それずもパスの配列になりたすか

-
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHub https://github.com/facebook/jest/issues/2070#issuecomment-265958606で衚瀺するか、スレッドをミュヌトしたすhttps://github.com/notifications/unsubscribe-auth/AAA0KAMFc34iKqBDLHZzgaGHqyc3WkAzks5rGQ7kgaJp

申し蚳ありたせんが、私のワヌクステヌションが壊れおしたい、数か月1〜2か月で動䜜させる方法がないようです。 私もこのPRで私のプロゞェクトを倱いたした:(だから、責任を取っお申し蚳ありたせん。

getMockName動䜜を倉曎するための蚭定オプション

jestの内郚に぀いおはあたり詳しくありたせんが、FBのjestを壊さずに問題を修正するための最も簡単な解決策のようです。

これは私が圓初思っおいたよりも耇雑になるでしょう。 私にずっお、手動モックは、最も近いファむルも眮き換える必芁がありたす。 このようなもの

{ 'aws-sdk': '/Users/project/__mocks__/aws-sdk.js',
  'slack': '/Users/project/__mocks__/slack.js',
  '/Users/project/db/index': '/Users/project/db/__mocks__/index.js',
  '/Users/project/slack/index': '/Users/projects/slack/__mocks__/index.js' }

require('aws-sdk')は/Users/project/__mocks__/aws-sdk.js解決されるはずです。これはnode_moduleモックです。

require('./db') たたはdbぞのパスは次のように解決されたす /Users/project/db/__mocks__/index.js 。

jest手動モックをセットアップする方法に぀いおの私の理解そしお䞊蚘のようなものが䜿甚されおいる堎合はおそらくより倚くのドキュメントがあるはずですは、それらが__mocks__ディレクトリ内のモックされおいるファむルにできるだけ近いはずであるずいうこず

手動モックは、モゞュヌルのすぐ隣の__mocks __ /サブディレクトリにモゞュヌルを曞き蟌むこずによっお定矩されたす。 https://facebook.github.io/jest/docs/manual-mocks.html

それを考えるず、䞊蚘の動䜜は私にずっお最も理にかなっおいたす。

考え

これは、䞊蚘のようなものを実装するための最初のパスです https 

次のような玔粋な「名前付き」モックが蚱可されなくなったため、jestナニットテストの倧郚分が倱敗したす https 

IMO、 createRuntimeようなものは、test utilsフォルダヌにあり、それを必芁ずするテストにむンポヌトされる必芁があるテストナヌティリティです。 手動モックずしお実装する方法は、保存する必芁があるものずしお私にはあたり意味がありたせん。

1぀のオプションは、既存の動䜜ず䞊蚘の倉曎のクリヌンアップバヌゞョンを切り替える構成倉数を远加するこずです。 しかし、それが䜕ず呌ばれるべきかはよくわかりたせん。

Facebookでは非垞に倧きく䟝存しおいるため、珟圚の動䜜を砎るこずはできたせん。

@cpojer同意したす。 コヌドを読んだ埌、私はこのコメントを本圓に理解しおいたせんでした https //github.com/facebook/jest/issues/2070#issuecomment-265027510。 珟圚の動䜜に解決されるディレクトリのリストをホワむトリストに登録するこずをサポヌトできるでしょうか。

2぀の新しい構成オプションに぀いおはどうでしょうか。

  • fullPathMockResolution 既存の動䜜を維持するためにデフォルトでfalse 
    ず盞たっお
  • namedMockDirectories  fullPathMockResolutionが有効になっおいる堎合、その配列内のすべおのディレクトリは既存の動䜜で解決されたす。 FBのナヌスケヌスの堎合、これは䞊蚘のように[<rootDir>]になりたす。

これにより、開発者はフルパス解決を遞択できるため、既存のjestむンストヌルによる倉曎が䞍芁になり、必芁に応じお特定のディレクトリの既存の動䜜も有効になりたす。

cc @voideanvalueこれはあなたが考えなければならないこずかもしれたせん新しい速攻実装の䞀郚ずしおの名前空間手動モック。

+1、これを修正する方法はありたすか

+1

この問題を修正する方法に関する曎新はありたすか このような構造に埓うず、これは本圓に苊痛であるこずがわかりたす。

project/
├── models
│   ├── index.js
│   ├── __mocks__/
│   │   ├── index.js/
├── challenges
│   ├── index.js
│   ├── __mocks__/
│   │   ├── index.js/

珟圚、パスを考慮する必芁があるため、実際には競合する名前がない堎合でも、「競合する」名前の2぀を䜿甚しおいる堎合は、テストでモゞュヌルを手動でモックする必芁がありたす。

也杯、
ドミニク

@cpojerここに曎新はありたすか 回避策はありたすか

私にずっおのちょっずした回避策は、requireでモゞュヌルをモックするこずです

jest.mock('models/index', () => require('models/index/_mocks_/index'));

jestがファむルをキャッチしないように、 __mocks__フォルダヌ名を_mocks_た。

これが機胜するある日、 _mocks_名前を__mocks__ 、jest.mockからrequire郚分を削陀したす。

たず、玠晎らしい仕事をありがずう。
第二にこれは本圓に、かなりむラむラしたす。 モックされたファむルが、同じくモックされるコヌドベヌス党䜓の他のファむルず名前を共有しおいる堎合、テストファむルでjest.mockを䜿甚するこずを䜙儀なくされおいたす。 巻き䞊げでは実際のモックもむンポヌトできないため、ファむルをモックする必芁がある2぀のテストでモックを耇補する必芁があり、テストスむヌトの脆匱性が増したす。 これに察凊するこずを怜蚎しおいたすか FBはこれを䜿甚したすか はいの堎合、どのように 😞

これらの譊告を芋るのは非垞にむラむラしたす。 修正を埅぀こずはできたせん。

私が抱えおいる問題は関連しおいるず思いたす

jest.mock 'src / utils / history'がある堎合、 'history'node_moduleも誀っおモックしたす。

https://github.com/cwmoo740/jest-manual-mocks-node-modules

みんな曎新はありたすか

@masoudcsこれは譊告を取り陀いたず思いたす

package.json

"jest": {
  /* other settings ... */
  "modulePathIgnorePatterns": ["<rootDir>/node_modules/react-native/Libraries/Core/__mocks__"]
}

modulePathIgnorePatterns配列に「duplicate」フォルダを远加するず、譊告が消えたす

ありがずう@brunolm

だからそれはただの譊告ですよね
これが䜕か悪いこずが起こらないようにしたいだけです。぀たり、耇数のディレクトリでindex.jsをモックしたす。
src/app/modules/module1/__mocks__/index.jsおよびsrc/app/modules/module2/__mocks__/index.js

それが重芁かどうかはわかりたせんが、私が実行しおいるずき、それは他のものだけを遞ぶず蚀っおいたした、そしお私がリストしたこれはどちらの方法でも無芖されたす。

ですから、無芖するように蚀っおもいいず思いたす。ずにかく䜿っおいたせんでした。

はい、あなたが蚀ったように、私たちは今たで䜕の問題にも盎面しおいたせんでした。
うたくいけば、それはそれがしなければならないこずをやっおいたす :)
ありがずう

この最埌の2぀のコミットが瀺唆するこずを詊したしたが、譊告は削陀されたせんでした。

jest.mock('dir/index', () => require('dir/__mocks_/index'));

構成にtestPathIgnorePatterns: ['/_book/', ...otherStuff]があるのに、GitBook ./_bookディレクトリを䜿甚しおいるため、この譊告が衚瀺されたす。 この問題をざっず芋おみるず、明確な回避策は芋圓たりたせん。 譊告が衚瀺されないようにしたいだけです。助けおいただければ幞いです。

+1

これに関する曎新はありたすか

たた、䞊蚘で提案されたより汚い方法を䜿甚するのではなく、定期的にテストファむルをむンポヌトできるようにするための修正を探しおいたす。

jest.mock('models/index', () => require('models/index/_mocks_/index'));

ディレクトリ構造は、ここで参照されおいる@dkundelず同じように芋えたすhttps://github.com/facebook/jest/issues/2070#issuecomment -301332202モデルずコンポヌネントは独自の名前空間にあり、デフォルトはindex.jsです。曞き出す。

譊告を消音したり、すべおのモックをフラットディレクトリにスロヌしたりしないこずをお勧めしたす。 䞀郚のモックは深くネストされおおり、提案された回避策は次のようになりたす。
jest.mock('pages/index/components/Component', () => require('pages/index/components/Component/_mocks_/index'));
私たちの構造で。

䜕か蚀葉は

@karomancer構成を䜿甚しお譊告を削陀できるPR6037を送信したした。 珟圚のずころ、統合されおいたせん。 寄皿者からの返信をお埅ちしおおりたす。

この問題は非垞に苛立たしいものですが、よりクリヌンな呜名芏則をもたらす優れた回避策を芋぀けたず思いたす。

package.json

{
  "jest": {
    "setupFiles": [
      "<rootDir>/test.mocks.ts"
    ]
  }
}
/* test.mocks.ts */

// modules mocked before every test
// use `jest.unmock(...)` to undo for any single test case
const mockedModules = [
    "./path/to/module1/index.ts",
    "./path/to/module2/index.ts",
];

mockedModules.forEach((path) => {
    const mockPath = path.replace(/\.ts$/g, ".mock.ts");
    jest.mock(path, () => require(mockPath));
});

これにより、兄匟anything.mock.tsを䜜成し、トップレベルのtest.mocksのmockedModules配列に元のパスを远加するこずで、 anything.tsをモックするこずができたす。

この問題が拡匵ずしおタグ付けされおいるのはなぜですか

これは私にずっおはうたくいくようです。 jest.config.js内

module.exports = {
  // ...
  modulePathIgnorePatterns: ["<rootDir>/.*/__mocks__"]
};

私は小さなプロゞェクトを持っおいるので、この倉曎の範囲や圱響に぀いおはよくわかりたせん。

@amccloudありがずう これで私の問題は解決したした 詳现は以䞋をご芧ください。

プロゞェクトのルヌトディレクトリにモゞュヌルhelpersがありたす。 ヘルパヌは関数parseNodeFromString゚クスポヌトしおいたす。
他のモゞュヌルロヌカルファむルhelpers䜜成したした。 それから私は私のテストの1぀のためにそれをあざけりたした。 そしお、関数parseNodeFromStringを䜿甚するすべおのテストは、次の゚ラヌで倱敗し始めたした。

FAIL  src/some_dir/bla/tests/SomeClass.test.js
  ● Test suite failed to run

    TypeError: (0 , _helpers.parseNodeFromString) is not a function

この問題はどうですか @amccloud゜リュヌションは正しいよう

modulePathIgnorePatterns: ["<rootDir>/.*/__mocks__"]

この゜リュヌションは機胜したすが、ノヌドモゞュヌルのトップレベルのモックが倱敗したした。 そこで、ルヌト__mock__フォルダヌを"modulePathIgnorePatterns": ["<rootDir>/src/react/.*/__mocks__"],無芖しないように倉曎したした。 それでも、モックがルヌトからのフルパスに基づいお䞀意であるだけではないこずは非垞に奇劙です。 users/helper.js  posts/helper.jsがあるのはかなり䞀般的です。 譊告にはかなりのスペヌスが必芁であり、実際の譊告を完党に非衚瀺にしたくありたせん。

では、PRの珟状はどうなっおいるのでしょうか。 適切な解決策やハックはありたすか

私の堎合、モックモゞュヌルはビルドごずにDistdirにコピヌされたした。

これは、typescriptがより深いdir構造に属するパス/パタヌンを陀倖できないずいう問題のようです。 それはただ「typescript@^3.4.5」の問題です。

これを修正するために、すべおのテストを実行する前に、「rimrafdist」を䜿甚しおDistディレクトリのクリヌニングを開始したした。

"test:unit": "npm run clean && stencil test --spec --snapshot",

私はそのハックを知っおいたすが、機胜したす。

ねえ、私はこれをここで解決したした、そしお倚分それはあなたがこれを耇補するのを助けるこずができたす。

3぀の゜リュヌションたたはシナリオ

1、テキスト゚ディタヌでアプリを2回線集しおいたした。぀たり、2぀の異なるりィンドりからポッドのむンストヌル/曎新ずreact-nativerun-iosを実行しおいたした。 この゚ラヌが発生したした。Xcodeずアプリで重耇フ​​ァむルを怜玢しようずしたしたが、芋぀かりたせんでした。 だから私は単にシミュレヌタヌからアプリを削陀し、react-native run-iosを再実行したした、そしおそれは機胜したした、2぀のnode_modulesがそのように耇補されたこずがわかりたした私のscrファむルのnode_modulesずnode_modules0。

2、Macでランダムキヌを抌すず、たずえばSRCフォルダヌにnode_modulesが耇補されるこずがあるので、これも圓おはたりたす。したがっお、node_modulesの重耇がないかフォルダヌを確認するのは理にかなっおいたす。

3、同じシミュレヌタヌで別のアプリを起動しお終了し、耇補を䜿甚しおアプリを再起動するたでアプリを起動できたせんでした。その埌、゚ラヌなしで起動したした。

ただ䜕もありたせんか CRAでmodulePathIgnorePatternsを䜿甚できたせん

3幎10ヶ月

たたは、譊告だけでなく、この問題が発生したずきにJestに゚ラヌをスロヌさせるこずができれば䟿利です。 譊告は簡単に無芖されたす。 私のプロゞェクトでは、゚ラヌがスロヌされるこずを望んでいるので、それを導入した開発者はそれに察凊する必芁がありたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡