Javascript 如何替换JS中的变量?
我正在尝试编写单元测试。我有一个简单的模块:Javascript 如何替换JS中的变量?,javascript,unit-testing,Javascript,Unit Testing,我正在尝试编写单元测试。我有一个简单的模块: var Common = module.exports = { unit: { somejQueryFn: function() { $('.selector') /* work with jQuery */ } } } 单元测试代码: describe('Test jQuery spec', function(){ var Common = require('common'); it('not working :( ',
var Common = module.exports = {
unit: {
somejQueryFn: function() { $('.selector') /* work with jQuery */ }
}
}
单元测试代码:
describe('Test jQuery spec', function(){
var Common = require('common');
it('not working :( ', function(){
//Work. I'm using jsdom, for using jQuery in tests; It's a jQuery instance
expect( typeof $ ).toBe('function');
//$ is undefined in somejQueryFn;
expect( Common.unit.somejQueryFn() ).toBe( result );
})
})
那么,我该怎么处理呢?有什么想法吗?
我尝试过使用新函数,但我认为这不是一个好主意。您需要在内部属性中包含一个return语句:
var Common = module.exports = {
unit: {
somejQueryFn: function() { return $('.selector') /* work with jQuery */ }
}
}
用$初始化公共文件怎么样
我真蠢。我在想,var$将覆盖可见性。我应该使用global.$=window.jQuery来解决这个问题。感谢Felix Kling的提示。Felix,如果你写一个答案,我会把它标记为一个解决方案。$必须全局定义。你正在调用somejQueryFn。目前,您列出的函数没有返回任何内容,因此它将返回未定义的。这不是问题所在。问题在于脚本中未定义$://$在somejQueryFn;中未定义。好主意!我完全忘记了这种方式。但是我应该在代码中做太多的更改,这样做
module.exports = function ($) {
return {
somejQueryFn: function() {
/* work with $ */
}
}
};
describe('Test jQuery spec', function(){
var Common = require('common')($);
it('not working :( ', function(){
expect( typeof $ ).toBe('function');
// $ is no longer undefined in somejQueryFn :)
expect( Common.somejQueryFn() ).toBe( result );
})
});