您好我正在尝试测试我开发的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
的相同范围有关。
有关如何测试此模块的任何消息?
答案 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()
...