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 ...