Чтобы начать тестирование вызовов на HttpClient
, импортируйте HttpClientTestingModule
и контроллер-макет HttpTestingController
вместе с другими символами, необходимыми для ваших тестов.
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
Затем добавьте HttpClientTestingModule
к TestBed
и продолжите настройку тестируемой службы.
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
describe('RegisterService', () => {
let service: AuthService;
let httpMock: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [AuthService]
});
service = TestBed.get(AuthService);
httpMock = TestBed.get(HttpTestingController);
});
afterEach(() => {
httpMock.verify();
});
describe('#registerUser tests', () => {
it('Should return registerResponse by making a POST request to the given url', () => {
const username = 'username';
const email = 'email';
const date = 'date';
const password = 'password';
const mockResponse: RegisterResponse = {
success: true,
message: 'Successfull'
};
service.registerUser(username, email, date, password).subscribe((res) => {
expect(res).toBe(mockResponse);
});
const req = httpMock.expectOne('http://localhost:3000/api/register');
expect(req.request.method).toBe('POST');
req.flush(mockResponse);
});
});
});
Теперь запросы, сделанные в ваших тестах, попадут на тестовый бэкэнд вместо нормального бэкэнда .
Эта установка также вызывает TestBed.get()
для ввода контроллера-макета, чтобы на него можно было ссылаться во время испытаний.
Следующий expectOne()
будет соответствовать URL-адресу запроса. Если ни один запрос или несколько запросов не совпали, URL-адрес expectOne()
будет выдан.
const req = httpMock.expectOne('http://localhost:3000/api/register');
Подробнее о тестировании угловых сервисов, использующих HttpClient
и тестировании Http-запросов, в официальной угловой документации .
К вашим услугам. Экспорт интерфейса.
export interface RegisterResponse {
success: boolean,
message: string
}
Но я рекомендую вам перенести модели данных в другой каталог или файл.
Затем импортируйте интерфейс в файл tes следующим образом.
import { RegisterResponse } from 'path-to-interface';