您好,我正在尝试测试我开发的 mithriljs
模块。然而, Mithril 源代码使用 global.XMLHttpRequest
来实现其 native 请求功能。
我尝试分配 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
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/