小编The*_*o L的帖子

Express Jest 和 Supertest 如何用参数模拟中间件

我已经尝试了几个小时,用 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)

mocking node.js express supertest jestjs

6
推荐指数
1
解决办法
4481
查看次数

标签 统计

express ×1

jestjs ×1

mocking ×1

node.js ×1

supertest ×1