【问题标题】:How to include variable in a test case in scope of tested object如何在测试对象范围内的测试用例中包含变量
【发布时间】:2016-03-20 03:35:42
【问题描述】:

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

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

【问题讨论】:

  • 看起来你正在使用 jasmine。为什么不使用 spyOn?

标签: node.js mocha.js require


【解决方案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);
   });
});

【讨论】:

  • 是的,我最终将 document 作为参数包含在内,但我想知道是否可以公开 require 的范围 ...
【解决方案2】:

使用 global.document = ... 导出全局变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多