2013-10-09 25 views
9

sockjs kullanılarak uygulanan web soketlerini test etmek istiyorum.Birim web testi nasıl yapılır - JavaScript

var sock = new SockJS('http://mydomain.com/my_prefix'); 
    sock.onopen = function() { 
     console.log('open'); 
    }; 
    sock.onmessage = function(e) { 
     console.log('message', e.data); 
    }; 
    sock.onclose = function() { 
     console.log('close'); 
    }; 

Ben buğulanmış ve sadece bu article bulundu. Bu yeterince iyi değil çünkü onu taklit etmek yerine gerçek bağlantı kuruyor.

Ben de SO çalıştı ama sadece cevaplanmamış bir soru here bulundu.

Birisi sinonjs önerdi ama herhangi iyi bir örnek bulmak mümkün değilim. Birisi bu konuda bazı ışık tutabilir eğer

ben takdir edeceksiniz. Eğer birim testi için WebSocket sunucusunda senin durumda olduğu gibi, bir dış kaynak erişen bir özellik istediğinizde

cevap

3

, her zamanki yaklaşım dış kaynak temsil etmek sahte-nesne kullanmaktır. Sahte nesne, dış kaynak gibi görünen ve davranan, ancak aslında ona erişmeyen bir nesnedir. Ayrıca, test edilen kodun beklendiği gibi davrandığında, test koduna rapor vermesini sağlayan günlük işlevselliği olabilir.

Durumda da tüm ilgili özellikleri ve normal SockJS yöntemlerini nesne olan bir sahte-SockJS nesnesi yaratacak, ancak uygulanması aslında bir sunucuyla bağlantı yoktur. Sadece yöntem çağrılarını kaydeder ve varolan sunucunun göndereceği beklenen yanıtı döndürür.

Ardından, sınama yapmak istediğiniz kodu yeniden kodlarsınız, böylece soketin kendisini oluşturmazsınız, bunun yerine dışarıdan atanmış bir soket nesnesini alırsınız (buna "dependency injection" denir ve yazı birimi için çok önemli bir deyimdir. test edilebilir kod). Gerçek kodda

, gerçek SockJS nesne atamak. Ama birim testinde, sahte nesneni atarsın. Test yöntemlerinizi çağırdıktan sonra, aygıtın beklenen verileri sunucuya gönderip göndermediğini kontrol etmek için sahte nesneyi inceleyebilirsiniz.

+2

Geri bildiriminiz için teşekkürler, pek çok işe benziyor. Hazır bir şey arıyorum. Örneğin, yasemin AJAX sahte çağrıları oluşturmak için tüm araçları var. Web prizleri giderek daha popüler hale geliyor. Bu sahte nesneleri kutudan ayıran bir kütüphane var mı? –

+2

@ user2855314 Jasmin, nesneleri gerçek nesnelerin etrafına dekoratörler olarak atar. Bunun terminolojisi "Spy" dır. 'SpyOn' yöntemi, yöntem çağrısını kendi uygulamanıza aktaran' ve CallFake (işlev) 'çağrısıyla zincirlenebilir. Bu, nesnenin bir sunucuyla gerçekten bağlantı kurmasını ve bunun yerine uygulamanızın geri dönüşünü döndürmesini engeller. – Philipp

+1

@Philipp, bunun için herhangi bir örnek verebilir misiniz? –