当我测试我的jQuery插件时,我遇到了一个泄漏问题。这个问题发生在我想要模拟字面对象上的值或函数时。
例如:
test('Overwrite some default setting', function(){
$.fn.plugin.defaults.bar = 'foo';
});
test('Bar should be undefined', function(){
equals( $.fn.plugin.defaults.bar, undefined );
});
这个测试将失败,因为第一个测试将 `bar` 变量添加到默认值中。我用以下代码修复了它,不过复制副本的做法看起来并不优雅。
$(function(){
/*
* Trolley Button Base: Options.
*/
var defaults_copy = $.extend({}, $.fn.plugin.defaults );
var setdown = {
setup : function(){
$.fn.plugin.defaults = $.extend({}, defaults_copy);
},
teardown : function(){ }
};
module('Test leakage', setdown );
test('Overwrite some default setting', function(){
$.fn.plugin.defaults.bar = 'foo';
});
test('Bar should be undefined', function(){
equals( $.fn.plugin.defaults.bar, undefined );
});
})
如果我在jQuery命名空间中有几个对象,如果我不得不获取每个对象的多个副本,那么可能会变得有点混乱。所以我想知道是否有更好的解决方案来“重置”所有对象?