2015-09-01 9 views
10

Kısa süre önce AngularJS uygulamaları için yazma ünitesi testlerini hatırlamanız/aramanız gereken tüm klişe kodlarını ortadan kaldırarak çok şeffaf hale getiren harika bir ng-describe paketini keşfettim ve yüklemek, enjekte etmek, alay etmek veya casusluk yapmak için yazın.İletken ile uçtan uca test için ng-tarifini kullanma

Birisi'u protractor ile kullanmayı denedi mi? Mantıklı ve ondan faydalanabilir miyiz?

ngDescribe({ 
    inject: '$http', // for making test calls 
    http: { 
    get: { 
     '/my/url': 42, // status 200, data 42 
     '/my/other/url': [202, 42], // status 202, data 42, 
     '/my/smart/url': function (method, url, data, headers) { 
     return [500, 'something is wrong']; 
     } // status 500, data "something is wrong" 
    }, 
    post: { 
     // same format as GET 
    } 
    }, 
    tests: function (deps) { 
    it('responds', function (done) { 
     deps.$http.get('/my/other/url') 
     .then(function (response) { 
      // response.status = 202 
      // response.data = 42 
      done(); 
     }); 
     http.flush(); 
    }); 
    } 
}); 

alay ediyor HTTP yanıtları genellikle daha iyi bir e2e kapsama ulaşmak ve UI nasıl tepki yapar sınamak için yardımcı olur: gözüme şeylerden


Bir HTTP yanıtlarını alay ne kadar kolay olduğunu belirli durumlar ve hata işleme nasıl çalışır. Bu, şu anda protractor-http-mock ile yaptığımız bir şey, ng-describe ile olduğu kadar kolay görünmeyen other options da var.

cevap

9

İletki primer E2E testi (selenyum webdriver ile) için tasarlanmıştır ve bu, gerçek bir arka ucun bağlanmış olması gerektiği anlamına gelir (aynı zamanda sahte bir arka kenar olabilir). Protractor'ın yaratıcısı here'u yazarken, uygulama kodunuz test koduyla ayrı olarak çalışır ve $ http servisine kolay erişim elde etmek mümkün değildir.

Arka uç çağrılarıyla alay ederseniz, E2E testi kullanmıyor olsanız bile E2E testi yapmıyorsunuz demektir. O zaman neden birim testine geri dönülmez? Tek fark, jQuery'yi Protractor API'sı yerine kullanacağınız ve testlerin Karma ile çalıştırılacağıdır. Daha sonra, ng-tarifi ve $ httpBackend'u kolayca kullanabilirsiniz, bu birincil birim birim testlerinde kullanılmak üzere tasarlanmıştır.

Ancak, bu yaklaşıma devam etmek isterseniz, bu Protractor issue numaralı telefondaki yorumları kontrol edebilirsiniz. Bu soruna çözüm öneren ve zaten bunlardan birini kullandığınız belirtilmiş birkaç kişi var. Ancak bu durumda ng- nu tanımlamanız size pek yardımcı olmaz.

Umarım bu soruya cevap verir.

İlgili konular