问题描述
路由文件(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 (将#修改为@)