nodejs单元测试:spyon从不调用

时间:2018-09-26 06:19:26

标签: node.js unit-testing

我正在尝试在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()和.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为null(在控制台中检查时),因此得到了错误代码(500)而不是OK(200)。 / p>

有人可以告诉我使用spyon()的正确方法是什么,或者如何模拟我的“ benchProfileService”以提供模拟功能?

我正在阅读有关'proxyquire'的内容,但是它说它用于删除require()依赖关系,也可以在这里使用它吗?

0 个答案:

没有答案