如何在JS中替换变量?

时间:2015-03-05 05:56:17

标签: 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 :( ', 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 );
  })
})

那么,我该如何处理呢?有任何想法吗? 我尝试过使用new Function(),但我认为这不是一个好主意。

3 个答案:

答案 0 :(得分:1)

如何使用Common初始化$

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

答案 1 :(得分:0)

我绝对愚蠢。我在想,var $将覆盖可见性。我应该global.$ = window.jQuery来解决这个问题。感谢Felix Kling提示。菲利克斯,如果你写一个答案,我会把它标记为一个解决方案。

答案 2 :(得分:-1)

您需要在内部属性中包含一个return语句:

var Common = module.exports = {
  unit: {
    somejQueryFn: function() { return $('.selector') /* work with jQuery */ }
  }
}