Unit testing 柴胡';似乎不接受头总是发送401

Unit testing 柴胡';似乎不接受头总是发送401,unit-testing,mocha.js,chai,chai-http,Unit Testing,Mocha.js,Chai,Chai Http,我正在尝试测试使用jsonwebtoken保护的API路由 我已经在postman中测试了我的路线,并得到了正确的结果,但是使用mocha/chai/chai http运行相同的测试是不起作用的 每次我测试受保护的路由时,都会收到401“未经授权” describe('user', () => { let user, token beforeEach(async () => { await dropDb() user = await

我正在尝试测试使用jsonwebtoken保护的API路由

我已经在postman中测试了我的路线,并得到了正确的结果,但是使用mocha/chai/chai http运行相同的测试是不起作用的

每次我测试受保护的路由时,都会收到401“未经授权”

describe('user', () => {
    let user, token

    beforeEach(async () => {
        await dropDb()

        user = await new User({ email: 'testing@test.com', password: 'password' }).save()
        const payload = { userid: user.id, role: user.roles.title, status: user.roles.status }
        token = jwt.sign(payload, secret, { expiresIn: 3600 })
    })

    it('should return a list of users when logged in', async () => {
        console.log(token)

        const result = await chai.request(app)
            .get('/api/user')
            .set('Authorization', `Bearer ${token}`)

        expect(result).to.have.status(200)
        expect(result).to.be.json
    })
})
我的直觉是,在某种程度上存在一种竞赛条件,即传递到集合中的令牌在测试运行之前没有完成签名。但在结果中,我的令牌似乎已设置

此外,如果在我看到令牌与创建的令牌匹配后,我将console.log该令牌。有人遇到过类似的问题吗


您使用的秘密是否正确?另外,您是否尝试过从您的测试中获取生成的令牌,并通过邮递员发送该令牌来尝试和调试它?是的,我这样做了,它工作正常(在邮递员中),但仍然没有完成我的测试,这让人困惑。然而,我似乎刚刚偶然发现了有史以来最奇怪的“解决方案”。。。我删除了在测试顶部初始化的令牌变量,而是添加了一个令牌属性
user.token=jwt.sign….
然后稍后使用user.token调用令牌,现在一切似乎都正常了。不知道为什么