繁体   English   中英

Mocking 一个带有 Jest 的 NodeJS 模块

Mocking a NodeJS module with Jest

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我花了一整天的时间寻找这个。 我有以下代码。

// CarModel.js
const makeModel = require('./makeModel');
const connectDB = require('../db/connection');
const { dbName, carCollection } = require('../../config');

module.exports = makeModel({ buildDb: connectDB(dbName), collectionName: carCollection });
// carHandler.js
const CarService = require('../services/CarService');
const carModel = require('../models/CarModel');

module.exports.list = async (event) => {
    // set to empty object if the value is null
    const queryParams = event.queryStringParameters || {};

    // setting default of page and perPage
    const { page = 1, perPage = 10} = queryParams;

    const carService = CarService({ carModel });
    const response = await carService.getPaginatedData({ page, perPage });
    return response;
}

在我的测试中,我想模拟CarModelCarService 要么对我有用。 我模拟这些的原因是用内存数据库替换真实数据库。 但我找不到任何可行的解决方案。 如果你们中的任何人有任何想法,那么我将不胜感激。

const { list } = require('../carHandler');
const CarService = require('../../services/CarService');
const connectDB = require('../fixture/db/connection');
const makeModel = require('../../models/makeModel');

it('Paginated data is returned when no query parameters are passed', async () => {
    const event = {
        queryStringParameters: {},
        requestContext: {
            path: 'car'
        }
    };

    const db = await connectDB();

    // Try 1:
    // tried this..not working
    const fakeCarModel = makeModel({buildDb: db, collectionName: 'cars'});

    jest.mock('../../models/CarModel', () => fakeCarModel);

    
    // Try 2:
    // this one didn't work as well
    const mockCarService = CarService({ carModel: fakeCarModel});
    jest.mock('../../services/CarService', () => mockCarService);

    const response = await list(event);
    const body = JSON.parse(response);

    expect(body).toHaveProperty('data');
    expect(body).toHaveProperty('paginator');
});

###编辑###

汽车服务.js

module.exports = function CarService({ carModel }) {
    async function create(data) {
        return await carModel.insertOne({ someKey: someValue });
    }

    async function getPaginatedData({page = 1, perPage = 10, sortBy = 'updated_at', sortMethod = 'DESC'}) {
        // build aggregate query
        return await carModel.aggregate(someAggregateQuery)
    }

    return {
        create,
        getPaginatedData
    };
}
问题暂未有回复.您可以查看右边的相关问题.
2 React和Jest模拟模块

我正在创建一个应用程序,在其中我使用redux和node-fetch进行远程数据获取。 我想测试一个事实,那就是我很好地调用了具有良好参数的fetch函数。 这样,我正在使用jest.mock和jasmine.createSpy方法: 这是我要测试的功能: 如您所见, ...

3 用Jest模拟节点模块

由于节点模块无法编译,我对我的本机应用程序的开玩笑的测试失败了(react-native-checkout)。 由于模块中的引用无效,因此无法编译。 我想嘲笑它,以便Jest测试通过。 我尝试使用jest.mock('react-native-checkout');进行简单的模拟 , ...

4 Mocking 一个带有 Jest 的配置模块

我正在尝试围绕使用简单的配置 object 添加测试。 假设我有: 配置文件 应用程序.ts 应用程序.test.ts 第二次测试失败,因为在第一次测试中修改了真实配置,但我希望它失败,因为 beforeEach 中的模拟已将值设置为“模拟 foo”。 我认为这与配置导出不是 function 有关 ...

5 用Jest模拟模块变量

我一直在使用Jest来模拟一些变量,这些变量用在经过测试的函数中,如下所示: 在这里, SERVER_URL的新设置值由hydrateApp() 。 但是,我不能使用module来做到这一点。 当我尝试设置module.hot时,在调用该函数时它将仍然是未定义的: 在这种情况 ...

7 用 Jest 模拟 jsonwebtoken 模块

我尝试开玩笑地模拟 npm 模块 jsonwebtoken 的验证功能。 该函数返回一个解码的令牌,但我想通过我的单元测试来传递这个函数的自定义返回。 我提出了明确的请求,在继续请求之前检查访问令牌的有效性。 但我想模拟令牌检查的时刻以直接返回用户值。 并且轻松通过这一步。 我把你关心的部分代码。 ...

8 开玩笑的 Mocking 模块

我在 App.js 中有一个方法,我想为其编写测试用例。 但是,当我在测试文件中导入 App.js 时,App.js 中的所有导入语句也会被导入并导致错误。 是否可以模拟使用 jest 在我的 App.js 中导入的依赖项。 考虑下面的例子 当我在 App.spec.js 文件中尝试时,是否可以模拟 ...

10 如何在 Jest 中模拟模块

我试图在 Jest 中嘲笑我的一个动作创建者。 实际上,我正在测试我的 React 组件。 我需要检查是否在某个事件上调用了 action-creator 函数。 我试图通过jest.mock模拟该函数,但抛出错误说: 这是我迄今为止尝试过的,但它不起作用: describe('>> ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM