我正在尝试编写单元测试。我有一个简单的模块:
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()
,但我认为这不是一个好主意。
答案 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 */ }
}
}