我已经尝试了几个小时,用 Jest、Supertest 和 Express 测试我的 Rest api 的端点。
该端点受到名为“ ”的身份验证中间件的保护advancedAuthGuard。
所以我试图模拟这个中间件,以便跳过端点测试的身份验证检查
//./router.js
router.get('/route1', advancedAuthGuard(false), controller);
Run Code Online (Sandbox Code Playgroud)
重要:advancedAuthGuard是一个接受配置参数的中间件(柯里化中间件)
//./middleware/advancedAuthGuard.js
const advancedAuthGuard = (additionalCondition) => (req,res,next) => {
//Check authentication logic ...
const isAuth = true
if (isAuth && !additionalCondition)
next()
else
next(new Error('Please auth'))
}
Run Code Online (Sandbox Code Playgroud)
当我运行以下测试来检查是否收到状态代码 '200' 时。测试在运行前失败。
//./test.js
import supertest from "supertest"
import app from './app.js'
import { advancedAuthGuard } from "./middlewares/advancedAuthGuard";
jest.mock("./middlewares/advancedAuthGuard")
const request = supertest(app)
beforeEach(()=>{
jest.clearAllMocks()
})
it("should '/route1' respond with 200 …Run Code Online (Sandbox Code Playgroud)