модульное тестирование nodejs: spyon никогда не вызывался - PullRequest
0 голосов
/ 26 сентября 2018

Я пытался юнит-тестирование в nodejs.

Вот мой код:

import { Request, Response, Router } from 'express';
import { asyncErrorHandler } from '../apiError';
import { ResponseCodes } from '../utils/responseCodes';
import { benchProfileService } from '../services/benchProfile.service';
import { logger } from '../utils/logger';

export function addRoutes(router: Router, imports: any): void {

    router.get('/api/profile/:stationId', asyncErrorHandler(async (req: Request, res: Response) => {
        const stationId = Number(req.params.stationId);
        console.log(stationId);
        const benchProfile = await benchProfileService.findOne({ where: { 'stationId': stationId } }); // this is the point of interest
        console.log(benchProfile); // To check what is returned
        if (benchProfile) {
            logger.debug('Bench Profile found in database');
            return res.status(ResponseCodes.Ok).json(benchProfile.dataValues.profile);
        }
...

(Обмен только соответствующим кодом)

Как вы можете видеть, я использую сервис с именем 'benchProfileService', который объявлен вдругой класс.

Теперь, когда я тестирую этот код, я хочу смоделировать функцию 'benchProfileService.findOne ()', чтобы получить ложный ответ.

Я пытаюсь использовать spyOn ().and.returnValue (), который, в соответствии с моим пониманием, должен следить за вызовом функции и возвращать фиктивные данные

Вот мой тест:

describe('GET /api/profile/:stationId', () => {
    it('Returns response to be defined with status code Ok', async () => {
        const url = '/api/profile/1';
        const findOneSpy = spyOn(benchProfileService, 'findOne').and.returnValue(Promise.resolve(
            { profile: {}, sessionId: '73892d8c-8479-4e61-a599-c62b5e8afbae', stationId: 1, id: 1}));
        request(app)
            .get(url)
            .end((error, response) => {
                console.log(error);
                console.log(response.statusCode);
                expect(findOneSpy).toHaveBeenCalled();
                expect(error).toBeFalsy();
                expect(response).toBeDefined();
                expect(response.statusCode).toBe(ResponseCodes.Ok);
            });
    });
});

(Опять отправка только соответствующего кода, всетребуемый импорт был выполнен)

Но когда я запускаю тест, я получаю сообщение об ошибке, что spyon никогда не вызывался, что приводит к тому, что benchProfile будет нулевым (при проверке в консоли), и, следовательно, получит код ошибки (500) вместо OK (200).

Может кто-нибудь сказать мне, как правильно использовать spyon (), или как издеваться над моим «benchProfileService», чтобы обеспечить фиктивную функцию?

Я читал о 'proxyquire', но там говорится, что он используется для удаления зависимостей require (), его можно использовать и здесь?

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