Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Por que o expect() é chamado antes de setar o resultado da request?

Eu não entendi tão bem essa questão de ordem. Eu criei o meu spy do userService que setei o retorno como null.

Fiz as avaliações e só depois com o httpMock eu setei que meu header tinha o token 'tokenTest'.

Eu fui trocar a ordem, porque para mim fazia mais sentido que o resquet tenha sido feito antes de fazer as avalições, para que elas recebam o valor certo, né? Mas deu erro no teste.

Isso deve ter a ver com o fakeAsync() e o .subscribe(), certo?

Alguém poderia me explicar essa parte com mais clareza? Agradeço.

Código:

  it('deve autentificar o usuario', fakeAsync(() => {
    const fakeBody = {
      id: 1,
      nome: 'Alvaro',
      email: 'alvaro@alura.com'
    };

    const spy = spyOn(userService, 'setToken').and.returnValue(null);

    service.authenticate('alvaro', '1234').subscribe(response => {
      expect(response.body).toEqual(fakeBody);
      expect(spy).toHaveBeenCalledWith('tokenTest');
    });

    const request = httpMock.expectOne(req => {
      return req.method === 'POST'
    });

    request.flush(fakeBody, {
      headers: { 'x-access-token': 'tokenTest' }
    });

    tick();
  }));
1 resposta
solução!

Fala ai Bianca, tudo bem? Essa é a maneira que o Angular resolveu criar a arquitetura, existem N maneiras de realizar teste de serviço e essa seria uma delas.

O flush é que vai de fato executar a requisição com valores mockados.

Espero ter ajudado,