unit test passthrough karma unit-testing testing angularjs

unit testing - test - Cómo usar mock $ httpBackend para probar la rama de error



unit test angular 4 (1)

Estoy siguiendo la documentación de AngularJS desde aquí.

El problema es que la documentación describe solo la rama "éxito / felicidad" del código, y no hay ningún ejemplo de cómo probar la rama "falla".

Lo que quiero hacer es establecer la condición previa para activar $scope.status = ''ERROR!'' código.

Aquí hay un ejemplo mínimo.

// controller function MyController($scope, $http) { this.saveMessage = function(message) { $scope.status = ''Saving...''; $http.post(''/add-msg.py'', message).success(function(response) { $scope.status = ''''; }).error(function() { $scope.status = ''ERROR!''; }); }; } // testing controller var $httpBackend; beforeEach(inject(function($injector) { $httpBackend = $injector.get(''$httpBackend''); })); it(''should send msg to server'', function() { $httpBackend.expectPOST(''/add-msg.py'', ''message content'').respond(500, ''''); var controller = scope.$new(MyController); $httpBackend.flush(); controller.saveMessage(''message content''); $httpBackend.flush(); // Here is the question: How to set $httpBackend.expectPOST to trigger // this condition. expect(scope.status).toBe(''ERROR!''); }); });


Está comprobando una propiedad del controller mientras configura una propiedad del ámbito.

Si desea probar el controller.status en su llamada de expect , debe establecer this.status dentro de su controlador en lugar de $scope.status .

Por otro lado, si establece $scope.status en su controlador, entonces debe usar scope.status lugar de controller.status en su llamada de expect .

ACTUALIZACIÓN: he creado una versión de trabajo para usted en Plunker:

http://plnkr.co/edit/aaQ7JQV9WlXhou0PYHTn?p=preview

Todas las pruebas están pasando ahora ...