在测试jwt身份验证级别时,如何在我的规范文件中添加路由以防止路由文件中的路由污染?

问题描述

路由文件(routes / api.js):

const express = require('express');
const passport = require('passport');
const router = express.Router();
const SteamApp = require('../models/steamapp.model');
const SteamAPI = require('../lib/steam.lib');

router.use((req,res,next) => {
  passport.authenticate('jwt',{ session: false } )(req,next);
} );

router.get('/getwishlist',async function(req,next) {
  // return appropriate data
} );

// [...] Other routes

通过调用app.use('/api',require('./routes/api'));进行集成。

在我的一个规范文件中,我想测试jwt身份验证是否正常工作并尊重可用的不同访问级别。因此,某些用户可以使用某些路由,并且所有路由都要求用户进行身份验证。这不是我自己测试现有路由的部分。

为确保不会无意间创建,更新或删除任何内容,并且不会调用远程API,我需要创建其他路由,例如/api/test/api/testuser/api/testadmin和等等。我知道我可以在api.js文件中创建路由,但这会污染文件

这是我的规格文件

const app = require('../app');
const request = require('supertest');
const jwt = require('jsonwebtoken');
const crypto = require('crypto');
const JWT_TOKEN = process.env.JTW_KEY;

const regularUser = {
  // user data
}

const notAUser = {
  // Fake user data
}

describe("Authentification JWT",() => {
  afterall(async () => {
    const mongoose = require('mongoose');
    await mongoose.connection.close();
    await mongoose.disconnect();
  } );

  it("doit permettre la connexion si un jeton correct est donné",async () => {
    const userToken = jwt.sign(regularUser,JWT_TOKEN,{ algorithm: 'HS256' });
    const response = await request(app).get('/api/test').set('Authorization',`Bearer ${userToken}`);
    expect(response.statusCode).toBe(200);
  } );

  it("doit refuser la connexion si un jeton incorrect est donné",async () => {
    const userToken = crypto.randomBytes(32).toString('hex');
    const response = await request(app).get('/api/test').set('Authorization',`Bearer ${userToken}`);
    expect(response.statusCode).toBe(401);
  } );

  it("doit refuser la connexion si aucun jeton n'est donné",async () => {
    const response = await request(app).get('/api/test');
    expect(response.statusCode).toBe(401);
  } );

  // Include other tests
} );

如何在beforeAll函数添加测试专用路由?我已经尝试了以下方法,但要求保持超时:

beforeAll(() => {
  app.use('/api',(req,next) => {
    const router = require ('../routes/api.js');
    router.get('/api/test',function(res,req,next) {
      res.json({ success: true,result: 1,textResult: 'All ok' });
    } );
  } );
} );

我收到的具体错误消息是:

Error: Timeout - Async function did not complete within 5000ms (set by jasmine.DEFAULT_TIMEOUT_INTERVAL)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...