Javascript 如何在使用Jest测试Node.js应用程序时模拟调用的函数中的方法
关于同一个问题,有很多问题被问到,我试图解决很多问题,但我似乎没有找到正确的答案 我正在编写一些单元测试来使用Jest库测试功能 我有一个名为postController.js的控制器,它有一个我正在测试的功能,您可以在下面看到 postController.jsJavascript 如何在使用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)
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函数,这需要模拟
如何模拟未导出的函数