首页 > 解决方案 > 如何在使用 Jest 测试 Node.js 应用程序时在调用的函数中模拟方法

问题描述

关于同样的问题有很多问题,我已经尝试解决很多问题,但我似乎找不到正确的答案。

我正在编写一些单元测试来测试使用 Jest 库的功能。

我有一个名为 postController.js 的控制器,它具有我正在测试的功能,您可以在下面看到

postController.js

const globalResponseHandler(item1, item2, item3) {
   // do something
}


exports.createPost = async (req, res, next) => {
    const doc = Post.create({ userObj });

    globalResponseHandler(doc, 201, res);
}

我有一个测试文件来测试 postController

postController.test.js

const postController = require('./postController');
const Post = require('./models/postModel');
const httpMocks = require('node-mocks-http');

Post.create = jest.fn();

let req, res, next;
beforeEach(() => {
    req = httpMocks.createRequest();
    res = httpMocks.createResponse();
    next = null;
 });

describe('PostController.createPost', () => {

     it('should call Post.create', async () => {

          await postController.createPost(req, res, next);
          expect(Post.create).toBeCalled();

      }
}

因此,如果我删除 globalResponseHandler 处理程序方法,则测试通过

在此处输入图像描述

但是如果我添加 globalResponseHandler 方法,它会引发以下错误

承诺被拒绝,原因是“TypeError:无法读取未定义的属性'_id'”。]

据我了解,它正在调用需要模拟的 globalResponseHandler 函数。

如何模拟未导出的此类功能?

标签: javascriptnode.jsmongodbunit-testingjestjs

解决方案


推荐阅读