JWT在使用摩卡测试express应用程序时出现格式错误



我正在尝试为我的用户路由编写测试文件。我遇到的一个问题是用户的删除路由。路由定义如下/api/users,并发出删除请求。这条路线受到保护,邮递员一切正常。我在Postman中设置的标题是Authorization。

一切看起来都很好,但在我的测试文件中,结果有点奇怪。这是我的代码

describe('Users', () => {
beforeEach((done) => {
User.deleteMany({}, (err) => {
done();
});
});    
describe('/DELETE user', () => {
it('it should delete a user with authorized token', (done) => {
const user = new User({
username: 'testuser1',
email: 'testuser1@gmail.com',
password: 'password',
passwordConfirm: 'password',
});
let token = null;
chai
.request(server)
.post(`/api/users/signup`)
.send(user)
.end((err, res) => {
token = res.body.token;
});
chai
.request(server)
.delete(`/api/users`)
.set('Authorization', 'Bearer ' + token)
.end((err, res) => {
res.should.have.status(201);
res.body.should.be.a('object');
res.body.should.have.property('status').eql('success');
res.body.should.have
.property('message')
.eql('User deleted successfully!');
});
done();
});
});
});

测试通过了,但我得到了这个JWT格式错误,我不知道为什么。我知道我在实际代币前面使用Bearer

这就是错误提到的

(节点:3059(未处理的PromiseRejection警告:JsonWebTokenError:jwt格式错误(节点:3059(未处理的PromiseRejection警告:未处理的承诺拒绝。此错误源于在没有catch块的异步函数内部抛出,或者拒绝了未使用.catch((处理的promise。(拒绝id:2((节点:3059([DEP0018]不推荐使用警告:不推荐使用未经处理的承诺拒绝。将来,未处理的promise拒绝将使用非零退出代码终止Node.js进程

我真的不明白发生了什么,因为如果我在poster中测试它时它运行良好,并且我在这里所做的只是在我的脑海中使用.set('Authorization', 'Bearer ' + token)添加令牌,那么它应该也能正常工作。

我遇到了这个问题,问题是你必须在你的方法之前调用.set(),在这种情况下是delete()

chai
.request(server)
.set('Authorization', 'Bearer ' + token) //<-- This before .delete()
.delete(`/api/users`)

最新更新