2016-03-25 5 views
1

こんにちはを使用するモジュール。しかしミスリルのソースコードは、その本来の要求機能にglobal.XMLHttpRequestを使用しています。単体テスト私は私が開発し<code>mithriljs</code>モジュールをテストしようとしているglobal.XMLHttpRequest

私はXmlHttpRequest mockglobal.XMLHttpRequestにを割り当てようとしましたが、私のテストはまだことを不平を言っている:

TypeError: global.XMLHttpRequest is not a function at createXhr (/path_tomodule/node_modules/mithril/mithril.js:2002:13)

Heretapeを使用して、私のテストコードです。

.js 
;(function(){ 
    var test = require('tape'); 
    //global.XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; 
    global.XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; 
    var m = require('mithril'); 
    var Module = require('../module.js'); 
    var config={ 
    url:'/urltoken', 
    title:'Hello there' 
    } 
    var modu=m.component(Module,{resource:config}); 
    test('constructor ',function(t){ 
    t.equal(modu.controller().url,config.url); 
    t.end(); 
    }); 
})(); 

私はそれがmithril NPMモジュールはglobalため、同じスコープにアクセスしていないとしなければならないと思います。

このモジュールをテストする方法についてどのようなsugestions?

答えて

0

私は最終的にミスリルのgitter roomで受け取った提案のおかげで、解決策は、hereのようにm.deps(mockedWindow)を使用することでした。嘲笑ウィンドウがmithriljs源からこのexampleで見つけることができます。

このgisttapeを使用してモジュールをテストするために必要な最終的なコードを含んでいます。

これはmodule.jsコードです:

'use strict'; 
var m = require('mithril'); 
var Module={}; 

Module.controller = function(args){ 
    var ctrl = this; 
    ctrl.url = args.resource.url; 
    ctrl.title = args.resource.title; 
} 

module.exports = Module; 

mytest.jsテストファイル:

mock = (function() { 
    "use strict" 

    var window = {} 

    window.window = window 

    var document = window.document = { 
     // FIXME: add document.createRange().createContextualFragment() 
    ... 

;(function(){ 
    var mock = require('./mock.js'); 
    var m = require('mithril'); 
    var test = require('tape'); 
    var Module = require('../module.js'); 

    m.deps(mock.window); 
    var config={ 
    url:'/urltoken', 
    title:'Module title' 
    } 

    var modu=m.component(Module,{resource:config}); 
    test('constructor ',function(t){ 
    t.equal(modu.controller().url,config.url); 
    t.end(); 
    }); 
})(); 

これは嘲笑ウィンドウの始まりです

関連する問題