mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
169 lines
5.1 KiB
TypeScript
169 lines
5.1 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.dev/license
|
|
*/
|
|
|
|
import {HttpClient, HttpRequest, HttpErrorResponse} from '../../index';
|
|
import {HttpTestingController, provideHttpClientTesting} from '../index';
|
|
import {TestRequest} from '../src/request';
|
|
import {provideHttpClient, withNoXsrfProtection} from '../../src/provider';
|
|
import {TestBed} from '@angular/core/testing';
|
|
import {isBrowser} from '@angular/private/testing';
|
|
import {Observer} from 'rxjs';
|
|
|
|
describe('HttpClient TestRequest', () => {
|
|
let client: HttpClient;
|
|
let backend: HttpTestingController;
|
|
|
|
beforeEach(() => {
|
|
TestBed.configureTestingModule({
|
|
providers: [provideHttpClient(withNoXsrfProtection()), provideHttpClientTesting()],
|
|
});
|
|
client = TestBed.inject(HttpClient);
|
|
backend = TestBed.inject(HttpTestingController);
|
|
});
|
|
|
|
afterEach(() => {
|
|
backend.verify();
|
|
});
|
|
|
|
it('accepts a null body', () => {
|
|
let resp: any;
|
|
client.post('/some-url', {test: 'test'}).subscribe((body) => {
|
|
resp = body;
|
|
});
|
|
|
|
const req = backend.expectOne('/some-url');
|
|
req.flush(null);
|
|
|
|
expect(resp).toBeNull();
|
|
});
|
|
|
|
it('throws if no request matches', () => {
|
|
let resp: any;
|
|
client.get('/some-other-url').subscribe((body) => {
|
|
resp = body;
|
|
});
|
|
|
|
try {
|
|
// expect different URL
|
|
backend.expectOne('/some-url').flush(null);
|
|
fail();
|
|
} catch (error) {
|
|
expect((error as Error).message).toBe(
|
|
'Expected one matching request for criteria "Match URL: /some-url", found none.' +
|
|
' Requests received are: GET /some-other-url.',
|
|
);
|
|
}
|
|
|
|
backend.expectOne('/some-other-url').flush(null);
|
|
});
|
|
|
|
it('throws if no request matches the exact parameters', () => {
|
|
let resp: any;
|
|
const params = {query: 'hello'};
|
|
client.get('/some-url', {params}).subscribe((body) => {
|
|
resp = body;
|
|
});
|
|
|
|
try {
|
|
// expect different query parameters
|
|
backend.expectOne('/some-url?query=world').flush(null);
|
|
fail();
|
|
} catch (error) {
|
|
expect((error as Error).message).toBe(
|
|
'Expected one matching request for criteria "Match URL: /some-url?query=world", found none.' +
|
|
' Requests received are: GET /some-url?query=hello.',
|
|
);
|
|
}
|
|
|
|
backend.expectOne('/some-url?query=hello').flush(null);
|
|
});
|
|
|
|
it('throws if no request matches with several requests received', () => {
|
|
let resp: any;
|
|
client.get('/some-other-url?query=world').subscribe((body) => {
|
|
resp = body;
|
|
});
|
|
client.post('/and-another-url', {}).subscribe((body) => {
|
|
resp = body;
|
|
});
|
|
|
|
try {
|
|
// expect different URL
|
|
backend.expectOne('/some-url').flush(null);
|
|
fail();
|
|
} catch (error) {
|
|
expect((error as Error).message).toBe(
|
|
'Expected one matching request for criteria "Match URL: /some-url", found none.' +
|
|
' Requests received are: GET /some-other-url?query=world, POST /and-another-url.',
|
|
);
|
|
}
|
|
backend.expectOne('/some-other-url?query=world').flush(null);
|
|
backend.expectOne('/and-another-url').flush(null);
|
|
});
|
|
|
|
it('throws if there are open requests when verify is called', () => {
|
|
client.get('/some-other-url?query=world').subscribe();
|
|
client.post('/and-another-url', {}).subscribe();
|
|
|
|
try {
|
|
backend.verify();
|
|
fail();
|
|
} catch (error) {
|
|
expect((error as any).message).toBe(
|
|
'Expected no open requests, found 2:' +
|
|
' GET /some-other-url?query=world, POST /and-another-url',
|
|
);
|
|
}
|
|
backend.expectOne('/some-other-url?query=world').flush(null);
|
|
backend.expectOne('/and-another-url').flush(null);
|
|
});
|
|
|
|
describe('successful errors', () => {
|
|
let request: TestRequest;
|
|
let observer: Observer<any>;
|
|
let lastError: any;
|
|
|
|
beforeEach(() => {
|
|
const httpRequest = new HttpRequest('GET', '/test');
|
|
observer = {
|
|
next: jasmine.createSpy('next'),
|
|
error: (err: any) => {
|
|
lastError = err;
|
|
},
|
|
complete: jasmine.createSpy('complete'),
|
|
};
|
|
request = new TestRequest(httpRequest, observer);
|
|
});
|
|
|
|
if (isBrowser) {
|
|
it('should allow creating HttpErrorResponse with successful status', () => {
|
|
const error = new ProgressEvent('error');
|
|
request.error(error, {status: 200, statusText: 'OK'});
|
|
|
|
expect(lastError).toBeDefined();
|
|
expect(lastError).toBeInstanceOf(HttpErrorResponse);
|
|
expect(lastError.status).toBe(200);
|
|
expect(lastError.statusText).toBe('OK');
|
|
});
|
|
|
|
it('should allow creating HttpErrorResponse with any status code', () => {
|
|
const error = new ProgressEvent('error');
|
|
request.error(error, {status: 404, statusText: 'Not Found'});
|
|
|
|
expect(lastError).toBeDefined();
|
|
expect(lastError).toBeInstanceOf(HttpErrorResponse);
|
|
expect(lastError.status).toBe(404);
|
|
expect(lastError.statusText).toBe('Not Found');
|
|
});
|
|
} else {
|
|
it('dummy test for node tests', () => {
|
|
expect(true).toBe(true);
|
|
});
|
|
}
|
|
});
|
|
});
|