首页 > 解决方案 > 为 Nodejs 上的笑话测试设置测试数据库

问题描述

我对用笑话进行测试很陌生,并且正在学习为我的代码编写测试。当前设置是:

    //cityService.ts:
import {inject, injectable} from "inversify";
import {NUCLEUS_TYPES} from "../nucleus/NUCLEUS_TYPES";
import {AppLogger} from "../libs/logger";
import {CityReadOnlyDao, CityReadWriteDao} from "../nucleus/daos/cityDao";
import {ICityAttributes} from "../nucleus/interfaces/attributeInterfaces";
import {ICityModel} from "../nucleus/interfaces/modelInterfaces";
import {BaseService} from "../nucleus/services/baseService";
import {escapeRegExp} from "../utils/helper";
import {SortOrder} from "../nucleus/constants/enums";

@injectable()
export class CityService extends BaseService<ICityModel, ICityAttributes>{
    constructor(@inject(NUCLEUS_TYPES.AppLogger) protected appLogger: AppLogger,
                @inject(NUCLEUS_TYPES.ReadOnlyDao.City) protected cityReadOnlyDao: CityReadOnlyDao,
                @inject(NUCLEUS_TYPES.ReadWriteDao.City) protected cityReadWriteDao: CityReadWriteDao){
        super(cityReadOnlyDao, cityReadWriteDao);
    }

    async suggestCity(req) {
        this.appLogger.debug(typeof req.body.query);
        let regQuery = new RegExp(escapeRegExp(req.body.query.trim()), 'i');
        let cities = await this.find({
            condition: {'name': {$regex: regQuery}},
            sortField: 'used',
            sortOrder: SortOrder.DESC,
            count: (req.body.limit ? Number(req.body.limit) : 10),
            start: (req.body.skip ? Number(req.body.skip) : 0)
        });
        return ({state: true, cities});
    }
}

样本测试是:

import { CityService } from "../src/services/cityService";
import container from "../src/libs/ioc";

let cityService = container.get<CityService>(TYPES.Service.City);

test("Testing with full Name", async () => {
        expect.hasAssertions();
        let response = await cityService.suggestCity({
            body: {
                query: 'London'
            }
        });
        expect(response.cities).toEqual(expect.arrayContaining([expect.objectContaining({ name: 'London' })]));
    });

测试运行并顺利通过。现在我怀疑我是否通过这个测试来访问我的数据库。有没有办法在没有调用我的数据库的函数的情况下对此进行测试?也许制作一个模拟数据库。有人可以指出我应该如何进行的正确方向吗?

标签: node.jsjestjs

解决方案


推荐阅读