javascript - test - Fallo en la prueba unitaria cuando la función solicitó el inicio
pruebas unitarias react js (1)
Esta es una extensión de una antigua pregunta mía: $ httpBackend en AngularJs Jasmine unit test
En mi controlador, se llama a la función getStuff al inicio. Esto hace que la prueba de mi unidad falle. Cuando lo comento, mi unidad pasa y funciona exitosamente. Cuando se descomenta, el error es:
Error: solicitud inesperada: GET / api / cosas No se esperaba más solicitud
Mi controlador es:
$scope.stuff = [];
$scope.getStuff = function () {
var url = site.root + ''api/stuff'';
$http.get(url)
.success(function (data) {
$scope.stuff = data;
})
.error(function(error) {
console.log(error);
});
};
//$scope.getStuff();
y mi prueba unitaria es:
it(''should get stuff'', function () {
var url = ''/api/stuff'';
var httpResponse = [{ "stuffId": 1 }, { "stuffId": 2 }];
httpLocalBackend.expectGET(url).respond(200, httpResponse);
$scope.getStuff();
httpLocalBackend.flush();
expect($scope.stuff.length).toBe(2);
} );
Todo en una prueba unitaria, funciona bien así. Desafortunadamente, esto rompe la funcionalidad real del sitio. Cuando elimino el comentario de la última línea del controlador, la prueba de unidad se rompe y el sitio funciona. Cualquier ayuda es apreciada. ¡Gracias!
CORREGIDO: Gracias a la respuesta de fiskers7, esta es mi solución.
it(''should get stuff'', function () {
var url = ''/api/stuff'';
var httpResponse = [{ "stuffId": 1 }, { "stuffId": 2 }];
httpLocalBackend.expectGET(url).respond(200, httpResponse);
httpLocalBackend.expectGET(url).respond(200, httpResponse);
$scope.getStuff();
httpLocalBackend.flush();
expect($scope.stuff.length).toBe(2);
} );
Verbatim de mi comentario:
Cuando crea el controlador, realiza una llamada a ''api / stuff'' y cuando llama a $ scope.getStuff () en su prueba, lo vuelve a llamar. Entonces, en lugar de una llamada a ''api / cosas'' tienes dos, que es lo que dice el error. httpBackend no esperaba dos llamadas al punto final, solo una por lo que arroja el error.
Ejemplo de código de mi comentario a esta respuesta si necesita verlo.
it(''should get stuff'', function () {
var url = ''/api/stuff'';
var httpResponse = [{ "stuffId": 1 }, { "stuffId": 2 }];
httpLocalBackend.expectGET(url).respond(200, httpResponse);
httpLocalBackend.flush();
expect($scope.stuff.length).toBe(2);
});