如何在测试对象范围内的测试用例中包含变量

时间:2015-12-14 15:26:24

标签: node.js mocha require

我有一个类似的测试用例:

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,但我想找到代理范围。

2 个答案:

答案 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 = ...导出全局变量。