Mudanças entre as edições de "Unit testing with default Angular installation"

De Basef
Ir para: navegação, pesquisa
(Mocked Http Requests)
(Mocked Http Requests)
Linha 55: Linha 55:
 
   ...
 
   ...
 
});
 
});
 +
</source>
  
 
2) In your test you need to get an instance of '''HttpTestingController''':
 
2) In your test you need to get an instance of '''HttpTestingController''':
 +
 +
<source lang="javascript">
 
   ...
 
   ...
 
   it('should fill user data on successful login', () => {
 
   it('should fill user data on successful login', () => {
Linha 64: Linha 67:
 
   });
 
   });
 
   ...
 
   ...
 +
</source>
 +
 +
3) In the same test you should assert that a call has been made with:
 +
 +
<source lang="javascript">
 +
    let mockedResponse = {
 +
        statusCode: 200,
 +
        body: {
 +
            anything: 'your endpoint returns'
 +
        }
 +
    }
 +
 +
    const request = httpMock.expectOne('http://some.request.url/to/somewhere');
 +
 +
    request.flush(mockedResponse);
 +
    httpMock.verify();
 
</source>
 
</source>
  

Edição das 14h05min de 26 de abril de 2018


Getting instance of a service

let mockedLoginService = TestBed.get(LoginService);

Asserting that some method is called

let spySomeMethod = spyOn(someInstance, 'someMethod');
 
// do something here
 
expect(spySomeMethod).toHaveBeenCalled();

Asserting that some method is called with given arguments

let spySomeMethod = spyOn(someInstance, 'someMethod').and.callFake((arg1, arg2) => {
  expect(arg1).toEqual(10);
  expect(arg2).toEqual(20);
});
 
// do something here
 
expect(spySomeMethod).toHaveBeenCalled();

Mocked Http Requests

1) Instead of using HttpClientModule, you should use HttpClientTestingModule. You will also use HttpTestingController. Below how to import and configure them:

...
import { HttpClientTestingModule, HttpTestingController } from "@angular/common/http/testing";
...
 
describe('YourClass', () => {
 
  beforeEach(() => {
    TestBed.configureTestingModule({
      imports:
        ...
        [ AppRoutingModule, HttpClientTestingModule ]
        ...
    });
  });
  ...
});

2) In your test you need to get an instance of HttpTestingController:

  ...
  it('should fill user data on successful login', () => {
 
    let httpMock = TestBed.get(HttpTestingController);
 
  });
  ...

3) In the same test you should assert that a call has been made with:

    let mockedResponse = {
        statusCode: 200,
        body: {
            anything: 'your endpoint returns'
        }
    }
 
    const request = httpMock.expectOne('http://some.request.url/to/somewhere');
 
    request.flush(mockedResponse);
    httpMock.verify();