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 );
      })
    });