2017-08-29 37 views
0

我开发了一个简单的jQuery插件,我想用facebook的jestjs框架执行一些自动化测试。如何在jest测试文件中要求jQuery插件?

该插件是一个自我执行的功能:

插件代码

; (function ($, window, document, undefined) { 

    var pluginName = 'searchAreaControl'; 

    function Plugin(element, options) { 
     this.el = element; 
     this.$el = $(element); 
     this.opt = $.extend(true, {}, $.fn[pluginName].defaults, options); 
     this.rootClassName = 'elem-searchAreaControl'; 
     this.popupID = null; 
     this.init(); 
    } 

    Plugin.prototype = { 
     ... 
    } 

    // Methods ... 

})(jQuery, window, document); 

该项目的文件夹结构是这样的:

Root 
| 
+-- __test__ 
| | 
| +-- sum.test.js 
| 
+-- searchAreaControl 
| | 
| +-- css 
| +-- searchAreaControl.js 
| 
+-- node_modules 
| 
// And other folders 

sum.test.js( JEST测试)

jest.dontMock('jquery').dontMock('searchAreaControl'); 
var $ = require('jquery'); 
var searchAreaControl = require('../searchAreaControl/searchAreaControl'); 

test('Initialize plugin', function() { 
    document.body.innerHTML = '<button id="myButton" class="elem-searchAreaControl" type="button"></button>'; 
    $('#myButton').searchAreaControl(); 
    expect($('#myButton').hasClass('elem-searchAreaControl')).toEqual(true); 
}); 

在测试文件中,我创建了一个按钮元素并尝试初始化它上面的searchAreaControl插件。我期望在初始化之后,这个按钮元素将具有类elem-searchAreaControl

我跑

npm test 

而且我得到这个错误:只要

Cannot find module 'searchAreaControl' from 'sum.test.js'

searchAreaControl.js是不是一个模块,我想我不能使用require('searchAreaControl')。有没有人有经验来指出解决方案?

以下是完整的代码提前

回答

0

Github repo

感谢我的package.json

"jest": { 
    "setupFiles": ["./setup-jest.js"] 
} 

创建安装-jest.js

global.window = window 
global.$ = require('jquery'); 

,然后它的自动在启动时需要jQuery npm test