Node.js Express.js: фиктивный объект запроса для целей модульного тестирования - PullRequest
0 голосов
/ 07 мая 2018

У меня есть метод, который проверяет, есть ли в строке запроса несколько параметров:

checkMandatoryQueryParams (mandatoryQueryParams: String[],  req: Request): void {
    let result = true;
    mandatoryQueryParams.forEach((element, idx) => {
        if (!req.query.hasOwnProperty(element)) {
            result = false;
        }
    });
    return result;
}

в модульном тестировании мне нужно смоделировать запрос на его тестирование, например:

describe('Utils', () => {

    it('checkMandatoryQueryParams', () => {
        const req: Request = new Request(); // pseudo-code
        req.query = "?foo=test&bar=test";   // pseudo-code
        expect( checkMandatoryQueryParams(['foo', 'bar'], req) ).toEqual(true);
    });
});

как я могу издеваться над экспресс-запросом?

1 Ответ

0 голосов
/ 07 мая 2018

Два варианта:

Создание собственного макета объекта:

describe('Utils', () => {
    /**
     * Mocked Express Request object
     */
    let mockedReq;

    beforeEach(() => {
        mockedReq = {
            query: {}
        };
    })

    it('checkMandatoryQueryParams', () => {
        const req = mockedReq;
        req.query = "?foo=test&bar=test";   // pseudo-code
        expect(checkMandatoryQueryParams(['foo', 'bar'], req) ).toEqual(true);
    });
});

Использование ручных макетов , аналогично приведенному выше:

describe('Utils', () => {
    /**
     * Mocked Express Request object
     */
    let mockedReq;

    beforeAll(() => {
        mockedReq = jest.fn().mockImplementation(() => {
            const req = {
                // Implementation
            };
            return req;
        });
    });

    beforeEach(() => mockedReq.mockReset())

    it('checkMandatoryQueryParams', () => {
        const req = mockedReq;
        req.query = "?foo=test&bar=test";   // pseudo-code
        expect(checkMandatoryQueryParams(['foo', 'bar'], req) ).toEqual(true);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...