首页 > 解决方案 > 受保护路由的 jest.mock express-jwt 中间件行为

问题描述

所以现在我有这样的东西(不起作用)

import app from '../src/app';

beforeAll(() =>
  jest.mock('../src/middleware/auth', () => (req: Request, res: Response, next: NextFunction) => {
    req.user = {};
    return next();
  });

afterAll(() =>
  jest.unmock('../src/middleware/auth'));

然后像往常一样进行我的测试:

describe('POST /v1/protected-route', () => {
  it('should return 200 OK', async () => {
    await request(app)
      .get('/v1/protected-route')
...

../src/app./middleware/auth像这样导入和添加它app.use(auth())

我仍然不断收到 401,看起来模拟在这里没有得到使用。

标签: typescriptexpressauth0express-jwt

解决方案


我通过jest.mock()beforeAll(). 似乎jest.mock()托管在其范围的顶部,而不是文件本身。因此,由于您在文件顶部导入应用程序(然后需要您的中间件),中间件仍然是您的原始而不是模拟,它会卡在beforeAll()函数中。

我是开玩笑的新手,所以我可能会误解一些重要的事情......


推荐阅读