2015-12-11 12 views
5

Bu, benim ilk projem, Karma ve Jasmine'i kullanıyorum ve ünitemde angularJS kodumu test ediyorum. Kurulum için Yeoman açısal jeneratör kullanılır.Jasmine kullanarak karma üzerinde 10'dan fazla test çalıştırıyorsunuz: "HATA: Testlerinizden bazıları tam sayfa yeniden yüklendi!"

11 sınava ulaştığımızda, "Bazı testleriniz tam sayfa yeniden yüklendi" şeklinde bir hatayla karşılaştım. Yeniden yüklemeyi tetikleyecek hiçbir test yapmıyorum.

Daha derine inme Github'da aynı sorunun referansını gördüm. https://github.com/jasmine/jasmine/issues/366 - yığının taşmasını önlemek için https://github.com/jasmine/jasmine/blob/master/lib/jasmine-core/jasmine.js

(FuzzySockets yorum)

sorun maximumSpecCallbackDepth 20'ye ayarlanır ve her seferinde currentSpecCallbackDepth aşarsa, yasemin çekirdekli bir kod hattı kaynaklanıyor gibi görünmektedir Daha fazla test setTimout işlevini kullanarak yeni bir yığın üzerinde yürütülür.

Bu, sorunlara neden gibi görünüyor ve karma hata fırlatma yapar. (Kendi birim testimde setTimeout yöntemini çağırıp bunu doğruladım ve aynı hatayı attı).

maximumSpecCallbackDepth 100 değiştirirseniz, benim testler ince çalıştırmak ve hiç hata kimse bu sorunu görmüş ve bir düzeltme biliyor Has sonuna

atılan edilir? En son karma (0.13.15) ve yasemin (2.4.1) versiyonlarını kullanıyorum.

Varsayılan phantomJS yerine krom başlatıcıyı kullanıyorum, dolayısıyla herkesin nasıl olduğunu anlamadığım için, yeoman tarafından oluşturulan varsayılan karma veya karma yapılandırmayla çok fazla uğraşmadım. başka burada aynı sorunla karşı karşıya değildir. Bu sorun için

+0

Tüm testlerim yine de yürütülür –

cevap

1

+1. Dediğim gibi, maximumSpecCallbackDepth sınırlama neden oldu, ama ben bugüne kadar bu konuda hiçbir düzeltme bulamadık. Muhtemelen https://github.com/karma-runner/karma/issues/1101 numaralı konuyu takip edebilirsiniz.

Geçici bir çözüm projenizdeki iç içe geçmiş "tanımla" bloğunu azaltmaktır.

1

Global BeforeEach'taki açısal enjeksiyonların çalışmayı durdurduğu ve tüm testlerin maksimum 20SmecCallbackDepth sınırı sonrasında başarısız olduğu benzer bir sorun var. Araştırmalarım sırasında, açılışı o limite ulaşıldığında yasemin setTimeout ile iyi oynamadıklarını öğrendim.

her test durumda yeni bir enjektör yaratacak her yerde örnek olarak verilmiştir Aşağıdaki kod: Yerine

var yourService; 
beforeEach(module('app')); 
beforeEach(inject(function(_yourService_) { 
    yourService = _yourService_; 
})); 

, tek enjektör kullanmak ve sadece bir kez modülleri kaydedecektir aşağıdakileri, yapabileceği . Bazı insanlar üzerinde github düşünmek gibi kendini Jasmine'e bu sorunun kök nedeni olduğunu öğrenmek için neredeyse bir hafta götürdü ve bu başkalarına yardımcı olabilecek

var yourService; 
module.sharedInjector(); 
beforeAll(module('app')); 
beforeEach(inject(function(_yourService_) { 
    yourService = _yourService_; 
})); 

Umut.