Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在使用Jest测试Node.js应用程序时模拟调用的函数中的方法_Javascript_Node.js_Mongodb_Unit Testing_Jestjs - Fatal编程技术网

Javascript 如何在使用Jest测试Node.js应用程序时模拟调用的函数中的方法

Javascript 如何在使用Jest测试Node.js应用程序时模拟调用的函数中的方法,javascript,node.js,mongodb,unit-testing,jestjs,Javascript,Node.js,Mongodb,Unit Testing,Jestjs,关于同一个问题,有很多问题被问到,我试图解决很多问题,但我似乎没有找到正确的答案 我正在编写一些单元测试来使用Jest库测试功能 我有一个名为postController.js的控制器,它有一个我正在测试的功能,您可以在下面看到 postController.js const globalResponseHandler(item1, item2, item3) { // do something } exports.createPost = async (req, res, next)

关于同一个问题,有很多问题被问到,我试图解决很多问题,但我似乎没有找到正确的答案

我正在编写一些单元测试来使用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);
}
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();

      }
}
我有一个测试文件来测试后置控制器

postController.test.js

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


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

    globalResponseHandler(doc, 201, res);
}
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:无法读取未定义的属性“\u id”。]

据我所知,它正在调用globalResponseHandler函数,这需要模拟

如何模拟未导出的函数