javascript - 对使用 global.XMLHttpRequest 的模块进行单元测试

标签 javascript node.js xmlhttprequest mithril.js

您好,我正在尝试测试我开发的 mithriljs 模块。然而, Mithril 源代码使用 global.XMLHttpRequest 来实现其 native 请求功能。

我尝试分配 XmlHttpRequest mockglobal.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 npm 模块未访问 global 的相同范围有关。

关于如何测试这个模块有什么建议吗?

最佳答案

感谢 mithril's gitter room 收到的建议,我终于找到了解决方案。 ,解决方案是使用 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()
    ...

关于javascript - 对使用 global.XMLHttpRequest 的模块进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36226396/

相关文章:

html - 从 Excel VBA 发送短信

javascript - 可用于 Firefox 附加组件的 XMLHttpRequest 的更强大替代方案?

javascript - 为什么 Chrome 在包含 Javascript 文件后添加查询字符串参数?

javascript - 如何在 Express.js 中使用 Less?

javascript - 打开在 Javascript 中用 PHP 检索到的 url

node.js - 如何计算mongoDB中唯一数据的数量

javascript - 添加 Meteor 登录 google oauth

post - XMLHTTPRequest (POST) 使用 VBScript 从网站检索数据

javascript - 如何更改 (jQuery) FullCalendar 中事件源的颜色?

javascript - Node.js:TypeError:对象 socket.io 没有方法 'listen'