Diyelim ki, basitlik adına (gerçek şey karmaşık ve alakasız), mevcut pencerenin sorgulama değerini döndüren bir yardımcı işlevim var. (Test koşum alakalı olup olmadığını emin değilim)qUnit sınaması için window.location nesnesini kullanmak mümkün mü?
var someUtilityFunction =() {
return window.location.search.substring(1);
};
Şimdi birim test qUnit bu işlevi istiyorum:
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;
});
Buradaki sorun, farklı bir sorgu dizesi için window.location.search
ayardır ki Sayfanın yeniden yüklenmesine neden olmak, aslında sonsuz bir istek döngüsüne girmek. olmadan window.location nesnesini someUtilityFunction
işlevinde herhangi bir değişiklik yapmadan çözmek için herhangi bir yol var mı?
teşekkürler. Kodun yeniden yazılması, 'window' nesnesini isteğe bağlı olarak aldığından yardımcı olmaz - bu durum, biri geçilmediğinde test edilir. Bir "sahte blok" içinde işlevi sarma işlevi yapmak zorunda olabileceğimi göründüğü işlevdeki kodu değiştiriyor olabilir. – jbabey
Kodunuzu yeniden yazmamak için kodunuzu bir şekilde sarmanız gerekir. Ben de iyi çalışıyor bir 'with' sarmalayıcı çalıştı (ancak yanlış kullanarak bunu kullanıyor). Daha sonra, özel 'window' nesnesini, özelliklerinizi taklit etmek ve kodunuzda ve ayrıca testte de kullanılabilir hale getirmek için global olarak kullanılabilir hale getirebilirsiniz. Sanırım jQuery ve Zepto da 'window' ve 'document' paketleyicilerine de geçtikleri için bunu yapıyorlar. –