簡単にするために(本物は複雑で無関係です)、現在のウィンドウのクエリ文字列を返すユーティリティ関数があるとしましょう。
var someUtilityFunction = () {
return window.location.search.substring(1);
};
ここで、この関数をqUnitで単体テストしたいと思います(テストハーネスが適切かどうかはわかりません)。
test('#1 someUtilityFunction works', function () {
// setup
var oldQS = window.location.search;
window.location.search = '?key1=value1&key2=value2&key3=value3';
var expectedOutput = 'key1=value1&key2=value2&key3=value3';
// test
equals(someUtilityFunction(),
expectedOutput,
'someUtilityFunction works as expected.');
// teardown
window.location.search = oldQS;
});
ここでの問題は、window.location.search
を別のクエリ文字列に設定すると、ページがリロードされ、本質的に無限の要求ループに入るということです。関数に変更を加えずにwindow.locationオブジェクトをモックアウトする方法はありsomeUtilityFunction
ますか?