2016-03-25 2 views
1

Привет Я пытаюсь протестировать модуль mithriljs, который я разработал. Однако исходный код мифрила использует global.XMLHttpRequest для собственных функций запроса.UnitTesting модуль, который использует global.XMLHttpRequest

Я попытался назначить XmlHttpRequest mock к global.XMLHttpRequest, но мой тест по-прежнему жалуются, что:

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

Here мой тестовый код с помощью tape.

.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 НПМ модуль не имеет доступа к такой же простор для global.

Любые предложения по тестированию этого модуля?

ответ

0

Я, наконец, нашел решение, благодаря предложениям, полученным в gitter room от mithril, решение должно было использовать m.deps(mockedWindow), как объяснено here. Обманутое окно можно найти в этом example из источников mithriljs.

Этот gist содержит окончательный код, необходимый для тестирования модуля с использованием tape.

Это 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 тестовый файл:

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

Это начало издевались окна:

mock = (function() { 
    "use strict" 

    var window = {} 

    window.window = window 

    var document = window.document = { 
     // FIXME: add document.createRange().createContextualFragment() 
    ... 
Смежные вопросы