Как сопоставить любой URL с HttpTestingController.expectOne? - PullRequest
0 голосов
/ 13 ноября 2018

waitOne () требует, чтобы строка URL соответствовала запросу, который тестируемый код делает через HttpClient. Но мне нужны отдельные тесты для проверки URL-адреса запроса и проверки данных результата. Я хочу, чтобы один тест подтвердил URL запроса - игнорируя данные результата - который я могу написать. И я хочу, чтобы другой тест проверил данные результатов - независимо от URL-адреса - которые я не могу написать, так как для ожидаемого результата требуется, чтобы параметр URL соответствовал.

Я искал способ сказать, что ожидают, что URL игнорируется или соответствует любому URL, но ничего не нашел. Я пытался передать '*', но это не сработало.

Есть ли способ заставить HttpTestingController соответствовать любому URL?

import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';

import { OperationsLogService } from './operations-log.service';
import { Severity } from './severity.enum';

describe('OperationsLogService', () => {
    let service: OperationsLogService;
    let httpMock: HttpTestingController;

    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [
                HttpClientTestingModule
            ],
            providers: [
                OperationsLogService
            ]
        });

        service = TestBed.get(OperationsLogService);
        httpMock = TestBed.get(HttpTestingController);
    });
    it('requests by page and max-count', (done) => {
        service
            .getEntries(3, 5)
            .subscribe((res: any) => {
                done();
            });
        const request = httpMock.expectOne('api/operations-log/oplog.json?page=3&max-count=5');
        request.flush({});
        httpMock.verify();
    });
    it('provides entries', (done) => {
        const entries = [
            {
                severity: Severity.Informational,
                whenLogged: Date.now(),
                code: 123,
                message: 'msg'
            }
        ];
        service
            .getEntries(3, 5)
            .subscribe((res: any) => {
                expect(res).toEqual(entries);
                done();
            });
        // don't want to specify the URL here
        const request = httpMock.expectOne('api/operations-log/oplog.json?page=3&max-count=5');
        request.flush(entries);
        httpMock.verify();
    });
});

Почему я хочу эту возможность: тесты должны быть независимы друг от друга. Одна проблема / изменение должна привести к как можно меньшему количеству неудачных тестов. Если тест URL не пройден, я не хочу, чтобы другой тест (содержит записи) не прошел. Один из них предложил мне сохранить URL-адрес в общей переменной. Это устраняет дублирование кода, но тесты все еще слабы. Если произойдет сбой (из-за изменения URL-адреса), произойдет сбой обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...