我正在使用Jest测试我的app.js,它说express.urlencoded
不是一个函数。
我正在使用express 4.16.4,而我正在为看起来像这样的app.js编写测试
const express = require('express');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(require('./routes'));
module.exports = app;
我的测试用例是:
jest.mock('express');
it('has a parser', () => {
const app = require('../src/app');
const express = require('express');
expect(app.use).toHaveBeenCalledWith(express.urlencoded());
});
这给了我一个错误:express.urlencoded is not a function.
我希望该测试能够通过,因为该应用程序运行正常,但仅在测试中它表示express.urlencoded不是函数。
答案 0 :(得分:0)
您必须在此处手动提供要测试的工厂和模拟模块方法。看起来像这样:
const urlencodedMock = jest.fn();
jest.mock('express', () => {
urlencoded: urlencodedMock,
});
it('has a parser', () => {
const app = require('../src/app');
const express = require('express');
expect(app.use).toHaveBeenCalledWith(urlencodedMock);
});
编辑:
我对Express并不熟悉,但是您可以尝试以下示例。 jest.mock()
将以通过express()
的方式模拟表达,然后在测试通过该部分时在内部进行模拟,再次对其进行模拟,以提供json()
和urlencoded()
函数表达。
jest.mock('express', () => {
return {
use: () => {
return;
}
}
});
it('has a parser', () => {
const jsonMock = jest.fn();
const urlencodedMock = jest.fn();
const app = require('../src/app');
jest.doMock('express', () => {
json: jsonMock,
urlencoded: urlencodedMock,
});
expect(app.use).toHaveBeenCalledWith(urlencodedMock);
});