Eva*_*kis 6 unit-testing node.js express jestjs
我对JS很新,但我正在努力学习.事实上,我试图模仿表达.这是我的基类(为了测试目的而减少):
import compression from 'compression';
import express from 'express';
export default class Index{
constructor(){}
spawnServer(){
console.log(express());
let app = express();
app.use(STATIC_PATH, express.static('dist'));
app.use(STATIC_PATH, express.static('public'));
etc...
}
}
Run Code Online (Sandbox Code Playgroud)
这是我试图在一个单独的测试文件中实现的测试...:
test('should invoke express once', () =>{
index.spawnServer();
expect(mockExpressFuncs().use.mock.calls.length).toBe(3);
})
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 如何使测试覆盖被测试类的要求 - 甚至可能吗?我希望我的索引使用express的模拟版本,包括express()和express.require.
我确实阅读了文档,尝试过类似的东西:
const mockFunction = function() {
return {
use: useFn,
listen: jest.fn()
};
};
beforeEach(() => {
jest.mock('express', () => {
return mockFunction;
})
express = require('express');
});
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 我做错了什么?:(
谢谢.
创建模拟app对象并使其由express模块返回.
然后你可以检查app.use使用expect(app.use.mock.calls.length).toBe(3)或更好地调用了多少次expect(app.use).toHaveBeenCalledTimes(1)
const app = {
use: jest.fn(),
listen: jest.fn()
}
jest.doMock('express', () => {
return () => {
return app
}
})
test('should invoke express once', () => {
expect(app.use).toHaveBeenCalledTimes(1)
})
Run Code Online (Sandbox Code Playgroud)