tutorial test run karma e2e javascript unit-testing asynchronous angularjs

javascript - run - test service angular 4



Pruebas unitarias de un servicio asíncrono en angularjs. (2)

En primer lugar, el setTimeout es particularmente difícil de probar ya que es difícil burlarse. Afortunadamente, AngularJS tiene una envoltura alrededor ( $timeout ) que cumple la misma función pero que puede ser burlado fácilmente:

ls.DoIt = function() { var deferred = $q.defer(); $timeout(function(){ deferred.resolve(5); },3000); return deferred.promise; }

El simulacro provisto para $timeout nos permite simular fácilmente el tiempo transcurrido (con $timeout.flush() ), lo que significa que nuestras pruebas pueden ejecutarse rápidamente, sin esperar realmente a que se complete el evento async (tenga en cuenta que el código de producción todavía está usando async API!).

Las pruebas cambiadas se verían así:

it("should equal 5", inject(function(myservice, $timeout) { var valueToVerify; myservice.DoIt().then(function(returned) { valueToVerify = returned; }); $timeout.flush(); expect(valueToVerify).toEqual(5); }));

Y, finalmente, el jsFiddle de trabajo: http://jsfiddle.net/v9L9G/1/

Estoy intentando probar un servicio que tiene métodos asíncronos, pero no tengo suerte.

He intentado implementar con promesas utilizando el soporte $ q en angularjs.

Cualquier ayuda sería apreciada.

http://jsfiddle.net/9pBze/37/

angular.module(''myapp'', [''myservice'']); angular.module(''myservice'', []).factory(''myservice'', function($q) { var ls = {}; ls.DoIt = function() { var deferred = $q.defer(); setTimeout(function(){ deferred.resolve(5); },3000); return deferred.promise; } return ls; }); describe(''services'', function () { beforeEach(module(''myservice'')); it("should equal 2", inject(function(myservice) { myservice.DoIt().then(function(returned) { expect(returned).toEqual(2); }); })); });


No está relacionado con Angular en sí, sino con las pruebas asíncronas de Jasmine .

Si necesita un setTimeout use Angular $timeout . Y si desea tener un control preciso sobre las ejecuciones de tiempo de espera de setTimeout / $, use el Reloj simulado.