UnitTesting使用global.XMLHttpRequest的模块

时间:2016-03-25 19:12:50

标签: javascript node.js xmlhttprequest mithril.js

您好我正在尝试测试我开发的mithriljs模块。但是,秘银源代码使用global.XMLHttpRequest作为其本机请求功能。

我尝试将XmlHttpRequest mock分配给global.XMLHttpRequest,但我的测试仍在抱怨:

  

TypeError:global.XMLHttpRequest不是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 npm模块没有访问global的相同范围有关。

有关如何测试此模块的任何消息?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案,感谢mithril gitter room收到的建议,解决方案是使用m.deps(mockedWindow),正如here所述。模拟的窗口可以在mithriljs源的example中找到。

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