Carlos Cifuentes
Referencia AngularJS → Angular

$httpBackend en Angular moderno

$httpBackend pasa a ser HttpTestingController, que se activa con provideHttpClientTesting. La prueba primero hace la llamada y después responde la petición capturada.

Antes · AngularJS
it('loads users', function () {
  $httpBackend.expectGET('/api/users').respond([{ id: 1 }]);
  var users;
  UserService.getAll().then(function (res) { users = res.data; });
  $httpBackend.flush();
  expect(users.length).toBe(1);
});

afterEach(function () {
  $httpBackend.verifyNoOutstandingExpectation();
  $httpBackend.verifyNoOutstandingRequest();
});
Después · Angular
beforeEach(() => {
  TestBed.configureTestingModule({
    providers: [provideHttpClient(), provideHttpClientTesting()],
  });
  http = TestBed.inject(HttpTestingController);
});

it('loads users', () => {
  let users: User[] = [];
  TestBed.inject(UserService).getAll().subscribe(res => (users = res));
  const req = http.expectOne('/api/users');
  expect(req.request.method).toBe('GET');
  req.flush([{ id: 1 }]);
  expect(users.length).toBe(1);
});
afterEach(() => http.verify());

Qué cambia

  • El orden se invierte: llama al servicio, y luego usa expectOne para obtener la petición pendiente y hacer aserciones sobre ella.
  • Cada petición se responde por separado con req.flush(body); pasa un status y un statusText como segundo argumento para simular un error.
  • http.verify() reemplaza a verifyNoOutstandingExpectation y verifyNoOutstandingRequest.

Consejo de migración. Declara provideHttpClient() antes de provideHttpClientTesting(), o el backend de pruebas no se va a usar. Las apps que usaban ngMockE2E para simular toda la API en el navegador necesitan otra herramienta para eso, como un interceptor o un servidor mock.

Relacionado

¿Planeas una migración o una plataforma de microfrontends?

En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.

Escríbeme por LinkedIn