2016-10-28 97 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'); 

注意,路径是相对于测试文件不是要测试的文件。