无法从请求对象模拟用户访问令牌并测试方法

Posted

技术标签:

【中文标题】无法从请求对象模拟用户访问令牌并测试方法【英文标题】:Unable to mock a users access token from the request object and test the method 【发布时间】:2021-08-11 02:18:48 【问题描述】:

我正在尝试对创建 JWT 的方法进行单元测试,并且在此过程中,我试图模拟出将用于创建 JWT 的用户访问令牌。这是我的方法和测试:

returnToken(expressRequestObject) 
        const payload =  userAccessToken: req.user.userAccessToken, userID: req.params.userID;

        return jwt.sign(
            payload,
            SECRET,
             expiresIn: '30d' ,
        );
    

测试代码:

describe('returns a token', function() 
        it('should return a token', function() 
            const requestObject = httpMocks.createRequest(params: userID: '1234');
            requestObject.user.userAccessToken = 'xivjioefv.dvedv.adsvdv';

            const a = authenticatorClass.returnToken(requestObject);
            console.log(a);
        );

我正在使用 httpMocks 创建一个模拟请求对象。我无法通过此测试,因为它错误地说 TypeError: Cannot set property 'userAccessToken' of undefined。我在这里做错了什么?有没有更好的方法来模拟访问令牌并使此测试通过? TIA

【问题讨论】:

【参考方案1】:

将用户对象添加到此 params: userID: '1234',user: userAccessToken: '' 为我解决了这个问题

【讨论】:

以上是关于无法从请求对象模拟用户访问令牌并测试方法的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 页面模拟失败:页面令牌与用户令牌相同

Laravel 通过 Passport 实现 API 请求认证:沙箱测试篇(私人访问令牌)

如何在 Spock 控制器测试中模拟 Grails 请求对象方法

用 Jest 模拟 jsonwebtoken 模块

使用Rspec存根和模拟在Rails Oauth中实现100%的测试覆盖率

利用postman进行接口测试并发送带cookie请求的方法