这不容易完成,因为超级测试就像客户端一样,并且您无权访问 Express 中的实际 req/res 对象(请参阅https://stackoverflow.com/a/26811414/387094 https://stackoverflow.com/a/26811414/387094).
作为一个完整的解决方法,这对我有用。
创建一个包含回调/承诺的文件。例如,我的文件 test-hack.js 如下所示:
let callback = null
export const callbackPromise = () => new Promise((resolve) => {
callback = resolve
})
export default function callWhenComplete () {
if (callback) callback('hack complete')
}
当所有处理完成后,调用回调callWhenComplete
功能。例如,我的中间件看起来像这样。
import callWhenComplete from './test-hack'
export default function middlewareIpnMyo () {
return async function route (req, res, next) {
res.status(200)
res.send()
// async logic logic
callWhenComplete()
}
}
最后在您的测试中,等待回调Promise,如下所示:
import { callbackPromise } from 'test-hack'
describe('POST /someHack', () => {
it.only('should handle a post request', async () => {
const response = await request
.post('/someHack')
.send({soMuch: 'hackery'})
.expect(200)
const result = await callbackPromise()
// anything below this is executed after callWhenComplete() is
// executed from the route
})
})