2015-10-17 99 views
8

我正在設置一個項目,使用Webpack & Jest。目前,Webpack解析配置會導致Jest測試出現複雜問題。在我的WebPack的配置,我有以下選項設置:配置Jest模仿webpack解析根和解析別名

resolve: { 
    root: [__dirname + "/src/" ], 
    extensions: ['', '.js', '.coffee', '.jsx', '.css', '.scss', '.svg'] 
    } 

這讓我需要有資產和模塊:

import UnknownImg from 'assets/unknown'; 

上述實際生活(相對於我的項目根)src/assets/unknown.svg

但是,當我使用上述行對文件運行測試時,在解析所需模塊/資產的路徑時出現錯誤。

Error: /Users/byronsm/dev/nerve-center/src/components/organisms/system_status.jsx: Cannot find module 'assets/unknown' from '/Users/byronsm/dev/nerve-center/src/components/organisms'

在出現這種情況下要操作的方式導入的模塊路徑的相對查找。我有沒有辦法讓Jest像Webpack一樣行事?

回答

20

現在在官方笑話文檔中提供了一個解決方案。見Webpack Tutorial

總之,modulePaths選項添加到您的笑話配置在package.json

"jest": { 
    "modulePaths": ["src"], 
    ... 
} 
+0

看起來這個鏈接被打破了。我認爲這是你所指的:https://facebook.github.io/jest/docs/en/configuration.html#modulepaths-array-string – clu

0

經過一個良好的夜間休息後,我又看了一遍,發現它不是Jest配置,而是節點。模仿的WebPack的resolve.root配置的行爲,最好的辦法是設置環境變量NODE_PATH到同一個目錄下運行jest時:

NODE_PATH=src jest 

這並不能真正解決多個目錄它解決的問題我的問題。這篇文章幫助我更好地理解了解決方案https://gist.github.com/branneman/8048520

1

Jestpack旨在通過在使用Jest運行之前使用Webpack構建測試文件來解決此問題。這意味着您的Webpack配置中的任何特殊模塊解析規則或加載器將以與生產版本完全相同的方式工作。

+0

看起來像一個不公平的「僅鏈接」標籤我認爲他們的答案相當清晰,沒有鏈接本身。 – Krustal

0

我寫了mimic-webpack採取webpack配置並鉤入節點的要求,以解決像webpack一樣的路徑。我沒有用笑話對它進行測試,但它應該可以與任何運行在節點上的spec runner一起工作,甚至可以支持簡單的加載器。

1

你可以用玩笑20+ resolver optionjest-webpack-resolver

該軟件包將其插入似乎並不成熟(數天老),但爲我做這份工作。此外,截至目前,它需要Jest config在單獨的jest.config.js文件中或通過CLI提供(不支持package.json)。