【发布时间】:2019-11-29 06:32:40
【问题描述】:
我无法模拟 app.use(express.static('public')); 在我添加这一行之前,我的所有测试都已经工作。我之前使用相同的方法测试过 express 服务器,但是,这是我第一次使用这个 express.static 命令。
在我添加这行代码后,我的测试中出现了这个错误 -
TypeError: _express.default.static is not a function
如果我删除
行,我的所有测试都会通过 app.use(express.static('public'));
但是,当我在其他地方的应用程序中提供一些静态图像时,我需要这条线。
我已经模拟了 Express,如下面的代码所示,然而,express 是一个返回 Object 的函数,然后用于模拟 get()、use() 和 listen() 调用。
现在我添加了 express.static('public') 看起来 express 也是一个静态对象。
所以我需要调整
jest.mock('express', () => ....
部分?
只是不确定如何模拟这一行 - app.use(express.static('public'));
Express - Server.js 文件
const start = () => {
const port = process.env.port || 7000;
const app = express();
app.use(bodyParser.json());
app.use(cors());
app.use(express.static('public'));
...
}
Test - Server.test.js File
jest.mock('express', () =>
jest.fn(() => ({
get: jest.fn(),
use: jest.fn(),
listen: jest.fn()
}))
);
jest.mock('body-parser', () => ({
json: jest.fn()
}));
jest.mock('cors');
describe('app set up correctly ', () => {
beforeEach(() => {
jest.clearAllMocks();
server.start();
});
it('should initialise express server', () => {
expect(express).toHaveBeenCalled();
});
我希望修改模拟调用来模拟静态调用,这样我就不再收到这个错误了 TypeError:_express.default.static 不是函数 我的其他测试按预期通过了
非常感谢任何人提供的任何帮助。
【问题讨论】:
-
express是一个具有属性的函数。所以,如果你想模拟它,你将不得不模拟函数的行为和所使用的任何属性。 -
@jfriend00 你有一个例子说明如何为 express.static('public')) 做到这一点吗?我已经嘲笑了 get 使用和收听的 express 属性。但我不知道需要对上面的模拟进行什么更改才能模拟 express.static。
-
抱歉,我不知道你会如何开玩笑。
标签: javascript node.js express testing jestjs