我想测试app.js
中的中间件是否被调用,虽然我模拟了work.js
模块,但它仍然运行原始代码。
app.js
const work = require('./work')
const express = require('require')
const app = express()
.use(work)
.use(...)
.get(...)
module.exports = app
work.js
function work(req, res, next){...}
module.exports = work
app-test.js
const supertest = require('supertest')
const app = require('../app')
test('test middleware in app.js', async(done) => {
jest.mock('../work', () => jest.fn((req, res, next) => next()))
const agent = () => supertest(app)
const work = require('../work')
await agent()
.get('/')
.set(...)
expect(work).toHaveBeenCalledTimes(1) // Error
done()
})
我希望work.js
会被调用一次。有什么问题吗?我应该改变我的测试吗?
2条答案
按热度按时间vmpqdwk31#
下面的例子对我很有效:
app.js
:work.js
:app.spec.js
:100%覆盖的单元测试结果:
以下是完整的演示:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/56014527
h7appiyu2#
经过一些修改,我成功地复制了slideshowp2的示例(它工作正常:)),使用了一个不需要服务器的版本。
一月一日