2015-09-01 9 views
10

Ich habe vor kurzem eine erstaunliche ng-describe-Paket entdeckt, die Schreibgeräte Tests für AngularJS Anwendungen sehr transparent macht durch Abstrahieren aller Boileplate-Code Sie erinnern/nachschlagen müssen und schreiben, um zu laden, zu injizieren, zu verspotten oder zu spionieren.Verwenden von ng-describe für Ende-zu-Ende-Tests mit Winkelmesser

Hat jemand versucht, ng-describe mit protractor zu verwenden? Macht es Sinn und können wir davon profitieren?


Eines der Dinge, die mein Auge gefangen ist, wie einfach Sie die HTTP-Antworten verspotten:

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(); 
    }); 
    } 
}); 

Mocking HTTP-Antworten hilft in der Regel eine bessere e2e Abdeckung zu erreichen und testen, wie funktioniert UI reagiert auf spezifische Situationen und wie funktioniert die Fehlerbehandlung. Dies ist etwas, was wir derzeit mit protractor-http-mock tun, gibt es auch other options, die nicht so einfach aussehen wie mit ng-describe.

Antwort

9

Gradmesser Primär ist für E2E-Tests (mit Selen-Webdriver) gedacht und das bedeutet, dass Sie ein tatsächliches Backend angeschlossen haben müssen (es könnte auch ein Pseudo-Backend sein). Als Entwickler von Protractor hat here geschrieben, Ihr Anwendungscode wird separat mit dem Testcode ausgeführt und es ist nicht möglich, einfachen Zugriff auf den $ http-Dienst zu erhalten.

Indem Sie die Backend-Aufrufe verspotten, führen Sie keine E2E-Tests mehr durch, selbst wenn Sie ein Tool für E2E-Tests wie den Protractor verwenden. Warum nicht zum Unit-Test zurückkehren? Der einzige Unterschied besteht darin, dass Sie jQuery anstelle der Winkelmesser-API verwenden und die Tests mit Karma ausgeführt werden. Dann können Sie problemlos ng-describe und $ httpBackend verwenden, die für die Verwendung in Komponententests vorgesehen sind. Wenn Sie jedoch mit diesem Ansatz fortfahren möchten, können Sie die Kommentare in diesem Protractor issue überprüfen. Es gibt mehrere Leute, die Lösungen für dieses Problem vorschlagen und wie bereits erwähnt, verwenden Sie bereits eine davon. Aber in diesem Fall ng-beschreiben wird Ihnen nicht viel helfen.

Ich hoffe, dass dies Ihre Frage beantwortet.

Verwandte Themen