受保护路由的 jest.mock express-jwt 中间件行为

Posted

技术标签:

【中文标题】受保护路由的 jest.mock express-jwt 中间件行为【英文标题】:jest.mock express-jwt middleware behavior for protected routes 【发布时间】:2019-04-23 16:26:18 【问题描述】:

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

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,看起来模拟在这里没有得到使用。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于受保护路由的 jest.mock express-jwt 中间件行为的主要内容,如果未能解决你的问题,请参考以下文章

jest中的mock,jest.fn()jest.spyOn()jest.mock()

express-jwt 不尊重不受保护的路径

jest中的mock,jest.fn()jest.spyOn()jest.mock()

jest中的mock,jest.fn()jest.spyOn()jest.mock()

使用 GraphQL 和 jwt-express 绕过 JWT

jest.mock() 中的 jest.fn() 返回 undefined