我正在尝试在无DOM的环境中使用m.request
对Mithril模型进行单元测试。
我使用浏览器的XMLHttpRequest将此测试用作浏览器环境中的集成测试,但希望选项能够单独运行它。
我正在考虑嘲笑XMLHttpRequest的响应,以便正确初始化m.request
,但我不知道从哪里开始。我有一个从测试驱逐出来的XMLHttpRequest的天真实现,并且已经查看了m.request
的来源,但作为一个相对的JS新手,它很难遵循。
将m.request
完全用于测试转换是否更有意义,因为我相信Mithril有效(并且在技术上是被测单元的依赖)?这让我感到有些害怕,因为m.request
具有链接行为,这可能是难以存根的。
我很乐意接受一个答案,该答案通常描述了我需要采取的步骤,以便在此方面取得一些进展,和/或对测试有意义的一些建议。
require('chai').should();
require('mithril');
m.deps({ XMLHttpRequest: function() {
this.open = function() {
}
this.setRequestHeader = function() {
}
this.send = function() {
}
}});
var Curriculum = require('../../../app/modules/practice/practice.curriculum');
describe('Curriculum', function() {
it('can retrieve a list of modules', function(done) {
Curriculum.modules().then(function(modules) {
modules.should.deep.equal([
{ name: 'Module 1' },
{ name: 'Module 2' },
{ name: 'Module 3' }
]);
done();
});
});
});
目前,使用mocha
运行此测试时无益,没有输出或错误。
被测单位的来源,如果有帮助:
module.exports = {
modules: function() {
// URL obscured to protect the innocent.
return m.request({
method: 'GET',
url: 'http://working.url'
}).then(function(objects) {
var transformed = objects.map(function(object) {
return { name: object.name };
});
return transformed;
});
}
};