typescript - 受保护路由的 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,看起来模拟在这里没有得到使用。
解决方案
我通过jest.mock()
将beforeAll()
. 似乎jest.mock()
托管在其范围的顶部,而不是文件本身。因此,由于您在文件顶部导入应用程序(然后需要您的中间件),中间件仍然是您的原始而不是模拟,它会卡在beforeAll()
函数中。
我是开玩笑的新手,所以我可能会误解一些重要的事情......
推荐阅读
- sql-server-2008 - 如何从 SQL Server 调用红移过程
- linux - 如何强制运行时链接器使用可执行目录中的共享库?
- vb.net - 找到第一,第二和第三名的赛车游戏
- html - 为什么 parralax 不能使用 html css
- r - 为 mcl 算法创建输入对象
- ruby-on-rails - Heroku 上的 Rails API 使用巨大的内存来完成简单的任务(将 Model.all 渲染为 JSON)?
- javascript - jquery - 检查是否有禁用元素,之前或之后
- python - 如何确定库的版本
- c# - 上下文使用后无法托管 API
- python - 什么是错误:“float() 参数必须是字符串或数字,而不是 'builtin_function_or_method'”