我有一个类似的测试用例:
const css = require('../css');
it('should include css', function(){
var document = jsdom('<html><head></head></html>');
return css('/bootstrap.min.css');
});
实际的css模块如下所示:
module.exports = function(url){
return new Promise(function(resolve){
const link = document.createElement('link');
link.href = url;
link.type = 'text/css';
link.rel = 'stylesheet';
document.getElementsByTagName('head')[0].appendChild(link);
});
}
代码将在浏览器中执行,因此文档可用,但测试在本地运行,我想使用我用JSDOM模块生成的假文档。是否可以让节点从测试用例的范围中查找文档? ATM我明确地传递了doc,但我想找到代理范围。
答案 0 :(得分:1)
通过导出带有url和document
对象的函数来解决此问题的一种方法。然后你的生产代码可以传入它的真实文档对象,你的测试可以配置一个测试对象来断言:
module.exports = function(document, url){
return new Promise(function(resolve){
const link = document.createElement('link');
link.href = url;
link.type = 'text/css';
link.rel = 'stylesheet';
document.getElementsByTagName('head')[0].appendChild(link);
resolve(document);
});
}
it('should append link', function() {
var document = jsdom('<html><head></head></html>');
css(document, someUrl).then(function(mutatedDocument) {
assert(mutatedDocument).containsURL(someUrl);
});
});
答案 1 :(得分:0)
使用global.document = ...导出全局变量。