Les tests API backend via $http, dans AngularJS/karma/jasmin tests?

Comment puis-je tester mon API backend en utilisant AngularJS/karma/jasmin tests?

J'ai essayé de créer le plus petit test montrant mon erreur:

echo_server.py

from bottle import response, route, run

@route('/echo/<echo>')
def echo_echo(echo):
    response.headers['Access-Control-Allow-Origin'] = '*'
    return {'echo': echo}    # Served as JSON

if __name__ == '__main__':
    run()

test/unit/apiSpec.js

//Should this be in `test/e2e/apiSpec.js`?
describe('echo', function () {
    var scope, http;

    beforeEach(inject(function ($rootScope, $http) {
        $http.defaults.useXDomain = true;    //CORS
        scope = $rootScope.$new();
        http = $http;
    }));


    it("should echo from server", function () {
        scope.$apply(function () {
            var ret;
            http.get("http://localhost:8080/echo/foo")
                .success(function (data, status, headers, config) {
                             ret = data;
                         })
                .error(function (data, status, headers, config) {
                           ret = data;
                       });
            console.log('ret = ' + ret);
            expect(ret.echo).toBe("foo");
        });
    });
});

Sortie de karma start configs/karma.conf.js

INFO [karma]: Karma v0.10.8 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.2 (Linux)]: Connected on socket m7imfgmhXdOY9JVKJh8r
LOG: 'ret = undefined'
PhantomJS 1.9.2 (Linux) echo should echo from server FAILED
    Error: Unexpected request: GET http://localhost:8080/echo/foo
    No more request expected
        at $httpBackend (~Projects/~karma-tests/test/lib/angular/angular-mocks.js:1178)
    ...
Pourquoi voudriez-vous utiliser angularJS et karma pour tester un backend. AngularJS et Karma sont tous sur le front-end. Vous n'avez pas besoin d'un navigateur pour envoyer une requête HTTP à un serveur. Et anguleuses se moque de est précisément utilisé pour se moquer d'un arrière-plan, de sorte que vous ne pouvez pas l'utiliser pour tester votre vrai backend.
Avantage de mettre tous mes tests en un seul endroit, c'est que quand ils passent; je peux déployer pour la mise en scène. I. e.: l'essai de serveur en cours d'exécution durant tout le développement.
J'ai des tests unitaires et des tests d'intégration de l'écrit en Java pour mon backend, les tests unitaires écrits en JavaScript avec le Karma et e2e tests écrits en JavaScript angulaire rapporteur pour l'angle d'frontend, et je peux construire et tester tout (à l'aide de gradle) avec une seule commande. Mon serveur CI aussi est-il à chaque poussée. Utiliser le bon outil pour le bon travail ne doivent pas empêcher les uoi de l'exécution de tous les tests et seulement si le déploiement de tous les tests passent.
Bien sûr, mais si je fais que des tests Reposant, JavaScript doit être fine...
Je ne dis pas de ne pas utiliser de JavaScript. Karma et angulaire se moque de qui ne sont pas appropriés. Je suis sûr que quelque chose existe dans le NodeJS écosystème de tester une bonne backend, mais je ne sais pas assez bien pour suggérer quelque chose.

OriginalL'auteur A T | 2013-12-22