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 名前空間にいくつかのオブジェクトがある場合、各オブジェクトの複数のコピーを取得する必要があると、少し面倒になる可能性があります。それで、すべてのオブジェクトを「リセット」するためのより良い解決策を誰かが持っているのではないかと思っていましたか?