2017-10-13 100 views
0

我想用笑話來測試我的組件,但是當我運行它,我得到 '無法從「Router.js」陣營組件測試用玩笑

at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:191:17) 
    at Object.<anonymous> (node_modules/react-router-dom/Router.js:5:15)` 

找到模塊「反應路由器/路由器」如果我啓動開發服務器,我的應用程序正在正常工作。在的package.json

我開玩笑的配置是這樣的:

"jest": { 
    "testPathIgnorePatterns": [ 
     "/node_modules/" 
    ], 
    "moduleDirectories": [ 
     "<rootDir>/node_modules", 
     "<rootDir>/src" 
    ] 
    } 

回答

2

您將要覆蓋moduleDirectories,你不包括默認的,這是["node_modules"]。您包括<rootDir>/node_modules而不是相同,因爲它只會查看項目根目錄中的node_modules,而"node_modules"遵循Node.js的模塊分辨率。 Node.js的行爲是在當前目錄中查找node_modules,如果未找到該模塊,它會在其父目錄(../node_modules)中查找等等,直到找到該模塊或到達文件系統的根目錄爲止。欲瞭解更多詳情,請登錄Loading from node_modules Folders

重要的區別是,如果更改默認行爲,嵌套模塊會中斷。在你的情況react-router-dom使用react-router as a dependency,而node_modules可能是這樣的:

node_modules 
├─ jest 
└─ react-router-dom 
    └─ node_modules 
     └─ react-router 

在這個例子中,node_modules在根目錄僅包含jestreact-router-dom,所以它不會找到react-router

注:NPM開始第3版提升依賴,結果是這樣的:

node_modules 
├─ jest 
├─ react-router-dom 
└─ react-router 

又見npm v3 Dependency Resolution

如果確實使用嚴重過時的npm版本,應立即升級。但是你永遠不應該依賴這種行爲,並且總是包含默認的模塊分辨率。

"jest": { 
    "testPathIgnorePatterns": [ 
    "/node_modules/" 
    ], 
    "moduleDirectories": [ 
    "node_modules", 
    "<rootDir>/src" 
    ] 
}