Jest 测试 API 预期为 200,但收到 401

问题描述

嗨,我正在测试它是否授权我获取订单。目前 BeforeAll 正在读取令牌,但在我运行测试时仍然收到 401。我的代码出了什么问题?我正在使用 Jest 和 Supertest。

这是我的测试文件

import app from '../server' 
import request from 'supertest'
jest.usefaketimers()

let token 

beforeAll((done) => {
    request(app)
        .post('/api/users/login')
        .send({
            email: 'test15@email.com',password: '123456'
        })
        .end((err,response) => {
            token = response.body.token; // saving token 
            done();
        });
});


describe('app',() => {

    describe('Statuses',() => {
        it('Index should return 200 Status',() => {
           return request(app)
                .get('/apI/Orders')
                .set('Authorization',`Bearer ${token}`)
                .then((response) => {
                 expect(response.statusCode).toBe(200);
                })
        });
    }); 
}); 

我事先保存了令牌,然后运行我的测试。我到处找,但似乎找不到解决方案。

auth.js

const protect = asyncHandler(async(req,res,next) => {
    let token 
    if(
        req.headers.authorization && 
        req.headers.authorization.startsWith('Bearer')
    ){
        console.log('token found')
    }{
        try {
            token = req.headers.authorization.split(' ')[1]
            const decoded = jwt.verify(token,process.env.JWT_SECRET)
            req.user= await User.findById(decoded.id).select('-password')

            next()
        } catch (error) {
            console.error(error)
            res.status(401)
            throw new Error('Not authorized,token Failed')
        }
    }

    if (!token){
        res.status(401)
        throw new Error('Not Authorized,no token')
    }
})

解决方法

只要您只需要测试响应是否正常,而不是使用 Jest expect,您是否尝试使用 expect 中的 superset?类似:

it('should return 200 Status',() => {
  request(app)
    .get('/api/orders')
    .set('Authorization',`Bearer ${token}`)
    .expect(200,done);
});

相关问答

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