2016-05-09 15 views
1

Ich bin neu in AngularJS zu testen und habe gerade begonnen, Tests mit Karma und Jasmin für einen bestimmten Anwendungsfall zu verwenden. Eigentlich bin ich ein Front-End-Entwickler und die Backend-APIs ändern sich ständig, während das System unter Migration steht. Also wollte ich einen Test für den Dienst implementieren, bei dem ich die Antwort von der tatsächlichen API abfangen und die Antwort testen kann, bei der ich die ganze Zeit die gleichen Daten habe, wenn die Datenbank exportiert wird und sich im konsistenten Zustand befindet. Gibt es eine Möglichkeit, es zu tun? Da alle Artikel gelesen werden, verspotten sie die Antwort der API und testen dann die einzelnen geschriebenen Methoden. Oder muss ich Winkelmesser für E2E-Tests verwenden?Testen in AngularJS: Wie kann ich die Backend-Antwort meiner APIs testen?

Antwort

1

Viele Leute vergessen, dass Karma nicht spezifisch für Angular ist. Es wird gemacht, um Tests mit JavaScript-Code auszuführen, unabhängig von dem Framework, das Sie verwenden können oder nicht. So können Sie Tests mit Karma ausführen, die keine Winkel- oder Winkelsperren verwenden und mit einer Datenbank interagieren. Diese Arten von Tests werden Integrations- oder Funktionstests genannt (es gibt eine feine Linie, die die beiden trennt, je nachdem wie man sie betrachtet) und sie sollten in jedem Projekt enthalten sein. Ich habe Tests dieser Art gesehen, Jasmin zu benutzen, und ich habe gesehen, dass sie Mocha benutzen. Es ist deine Entscheidung. Sie sollten jedoch nicht erwarten, dass sie so schnell wie Unit-Tests ausgeführt werden, da Sie mit der Netzwerk- und Datenbanklatenz zu kämpfen haben. Wenn Sie diese Tests in Ihrem Entwicklungszyklus ausführen, liegt es an Ihnen. Da sie länger dauern, werden sie meistens nur auf einem vollständigen Build ausgeführt oder nachdem sich die API/Datenbank geändert hat.

All dies wird gesagt, die Entwickler, die die API produzieren, sollten diejenigen sein, die diese Tests schreiben/ausführen und Ihnen (dem Kunden) aktualisierte Dokumentation zur Verfügung stellen.

+0

Können Sie mich auf eine Ressource hinweisen was zeigt anhand eines Beispiels, wie man eine Live-API aufruft und dann die Antwort bestätigt? –

+0

Fragen an Google nach Dingen für Sie ist nicht, wie es hier auf SO gemacht wird. Es gibt viele Websites zur Verfügung, um zu zeigen, was Sie wollen. Keywords wie 'Node mocha test api' sollten Ihnen eine vernünftige Liste geben. – MBielski

1

Wenn Sie Tests mit Karma ausführen, wird Ihr Backend verspottet, sobald Sie angular-mocks.js laden (siehe https://docs.angularjs.org/api/ngMock/service/ $ httpBackend). Das ist es, was wir wollen, weil wir Komponententests schnell ausführen müssen, ohne ein Backend und eine Datenbank ausführen zu müssen.

Wenn Sie die Interaktion zwischen Ihrer App und der realen API testen möchten, müssen Sie E2E-Tests mit protactor durchführen, da bei dieser Art von Test das Back-End ausgeführt wird.

Jetzt, wenn Sie die echte API-Ausgabe testen müssen, ist es - meiner bescheidenen Meinung nach - die Arbeit des Backend-Entwicklers. Nachdem Sie das gesagt haben, können Sie es natürlich selbst testen, aber es hat nichts mit AngularJS zu tun. Ich bin kein NodeJS-Entwickler, aber es gibt Tools zum Testen des API-Endpunkts. Sie können an SuperTest suchen zum Beispiel

bietet eine High-Level-Abstraktion zum Testen HTTP

Hier ist ein Beispiel aus ihrer Dokumentation weichen:

var request = require('supertest'); 
var express = require('express'); 

var app = express(); 

app.get('/user', function(req, res) { 
    res.status(200).json({ name: 'tobi' }); 
}); 

request(app) 
    .get('/user') 
    .expect('Content-Type', /json/) 
    .expect('Content-Length', '15') 
    .expect(200) 
    .end(function(err, res) { 
    if (err) throw err; 
    }); 
+0

@MBielski Ich möchte nicht testen, ob die API die Ausgabe korrekt berechnet ... Aber wenn die Parameter, die wir in der Antwort gesendet haben, gleich sind, plus der API-Endpunkt ist immer noch der gleiche und keine Änderung wurde vorgenommen Verbessern Sie die Ausführlichkeit des Endpunkts. Das ist alles. Wir haben Tests in Mocha im NodeJS-Backend, um jede Funktion zu testen, die von diesem Endpunkt aus aufgerufen wird. –

+1

@MBielski du hast Recht, korrigierte ich meine Antwort. Vielen Dank für Ihren Punkt –

+0

@SarasArya Sie brauchen Ihre eckige App nicht, um Ihren API-Vertrag zu überprüfen. Sie können das Endopint Ihres Knotens mit Mocha perfekt testen, zum Beispiel mit SuperTest oder Chai. –