如何在测试对象范围内的测试用例中包含变量
How to include variable in a test case in scope of tested object
我有一个类似这样的测试用例:
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,但我想找到代理范围。
解决此问题的一种方法是导出一个接受 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);
});
});
使用global.document = ...导出全局变量。
我有一个类似这样的测试用例:
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,但我想找到代理范围。
解决此问题的一种方法是导出一个接受 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);
});
});
使用global.document = ...导出全局变量。