2017-08-29 3 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.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')を使用することはできませんと仮定モジュールではありませんよう。誰かが解決策を示す経験はありますか?ここで

は完全なコードは、私がセットアップ-jest.jsに

global.window = window 
global.$ = require('jquery'); 
package.jsonで

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

を作成し、これが自動だ事前

答えて

関連する問題