2017-08-29 94 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