2016-10-28 23 views
2

最近我已經將我的一個項目轉換爲webpack & babel。它由淘汰賽組成。webpack需要非js的內容在單元測試

運行單元測試時遇到問題。如果我在測試文件文件夾一樣

import component from '../custom-options'; 

test('adds 1 + 2 to equal 3',() => { 
    expect(3).toBe(3); 
}); 

的問題是,該組件是具有所需的排序

var htmlString = require('./custom-options.html'); 

的。當我試圖運行的網站本身就是一個模塊它運行良好,因爲原始加載程序已根據此要求進行配置。但是,當我運行jest測試輸出:

custom-options.html:1 
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){?<div id="custom-options-containe" class="mod--custom-options"> 
                         ^
SyntaxError: Unexpected token < 

    at transformAndBuildScript (node_modules\jest-cli\node_modules\jest-runtime\build\transform.js:284:10) 
    at custom-options.js:13:38 
    at Object.<anonymous> (custom-options.js:93:3) 

任何想法爲什麼會發生這種情況?我以爲開玩笑是有問題的,但我已經試過用艾娃去冒險,結果是一樣的。我開始認爲這是一個巴貝爾問題。

我正在用babel-jest預處理器運行jess。

回答

6

你在package.json這樣開玩笑設置,您可以爲所有無JS文件一個全球性的模擬:

"jest": { 
    "moduleNameMapper": { 
    "^.+\\.html$": "<rootDir>/__mocks__/htmlMock.js" 
    } 
} 

然後在你的項目的根與以下內容__mocks__文件夾中創建文件htmlMock.js

module.exports = 'test-file-stub'; 

欲瞭解更多信息看看here

如果はNT確實有一個特殊的模擬每一個測試情況下,你也可以模擬文件在您的測試是這樣的:

jest.mock('path/from/test/to/custom-options.html',()=> 'test-file-stub'); 

注意,路徑是相對於測試文件不是要測試的文件。