2012-10-02 17 views
8

Estoy escribiendo algunas pruebas para nuestra aplicación, y he incluido angularjs-mocks.js para que pueda usar las agradables funciones dsl que vienen con él.Usar angularjs se burla sin burlarse de nada

Pero no quiero burlarme de las solicitudes de $ http, ya que estoy integrando esta aplicación con el back-end de un cliente que está en constante cambio, y quiero probar en contra de las respuestas reales.

¿Cuál es la mejor (más fácil) forma de utilizar el back-end http real en esta situación?

EDIT:

he encontrado una posible solución, que consiste en utilizar esto:

$httpBackend.whenPOST(/.*/).passThrough() 

Pero como menciono a continuación, que no funciona, posiblemente roto? Me sale este error:

Error: Unexpected request: POST /some/url/here No more request expected 

He abierto un problema aquí: https://github.com/angular/angular.js/issues/1434

+0

siempre se puede crear un $ mock $ para inyectar creando un javascript simple que hizo la solicitud http XHR, no se necesitan burlas angulares. Es lo bueno de probar en JavaScript, puedes unir objetos e inyectarlos de la forma que desees debido a la escritura dinámica. –

+0

Correcto, pero el problema es que angularmocks anula $ httpBackend, que usa $ http. Ahora estoy tratando de solucionarlo con $ httpBackend.whenGET (/.*/). PassThrough(), pero parece estar roto, o no lo estoy usando bien. – doubledriscoll

+0

Supongo que lo que sugiero es que puedes usar vanilla js para crear un objeto con todos los métodos que necesitas. No se requiere simulacro angular. –

Respuesta

2

me di cuenta de una solución rápida y sucia para el problema: Comentando la línea donde se httpBackend $ anulados (1365 en angular -mocks-1.0.2.js).

angular.module('ngMock', ['ng']).provider({ 
    $browser: angular.mock.$BrowserProvider, 
    $exceptionHandler: angular.mock.$ExceptionHandlerProvider, 
    $log: angular.mock.$LogProvider, 
    //$httpBackend: angular.mock.$HttpBackendProvider, 
    $rootElement: angular.mock.$RootElementProvider 
}).config(function($provide) { 
    $provide.decorator('$timeout', function($delegate, $browser) { 
    $delegate.flush = function() { 
     $browser.defer.flush(); 
    }; 
    return $delegate; 
    }); 
}); 

Esto probablemente se rompe algo más, pero me permite probar lo que tengo que probar, y no afecta a la aplicación de producción, por lo que está bien conmigo. Esperemos que en el futuro haya una forma integrada de hacerlo.

+0

Eso es bastante feo. Es triste que no hay mejor manera ... – stej

Cuestiones relacionadas