2016-03-25 11 views
1

Hallo Ich versuche, ein mithriljs Modul zu testen, das ich entwickelt habe. Der Mithril-Quellcode verwendet jedoch global.XMLHttpRequest für seine native Anforderungsfunktionalität.UnitTesting ein Modul, das global.XMLHttpRequest verwendet

Ich habe versucht, eine XmlHttpRequest mock-global.XMLHttpRequest, aber mein Test beschwert ist nach wie vor, dass zuweisen:

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

Here ist mein Testcode tape verwenden.

.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(); 
    }); 
})(); 

Ich denke, es zu tun hat mit mithril npm Modul nicht den gleichen Umfang für global zugreifen.

Haben Sie Fragen, wie Sie dieses Modul testen?

Antwort

0

Ich fand schließlich die Lösung, dank der Vorschläge, die bei Mithrils gitter room erhalten wurden, war die Lösung m.deps(mockedWindow) zu verwenden, wie here erklärt. Das verspottete Fenster kann in diesem example von den mithriljs Quellen gefunden werden.

Diese gist enthält den endgültigen Code, der zum Testen des Moduls unter Verwendung von tape erforderlich ist.

Dies ist der module.js Code:

'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; 

Die mytest.js Testdatei:

;(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(); 
    }); 
})(); 

Dies ist der Beginn der verspottete Fenster:

mock = (function() { 
    "use strict" 

    var window = {} 

    window.window = window 

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