我遇到了一个非常复杂的场景,希望你们给我一个暗示。
所以我有一个main方法,它是一个api端点,这个方法调用另一个方法来检查用户是否有权使用这个端点。 我称之为apiAuthorazation的子端点向第三方URL发送get请求,并且该第三方返回一个响应,该响应表明该用户是否被授权!
所以我已经对main方法进行了单元测试,但现在我想将此授权部分添加到它。我知道我可以使用像Nock这样的muck库或其他类似的库,但我的问题是如何将这个子方法添加到我的uit测试中。
这是我的api端点方法:
module.exports.api = (event, context, callback) => {
// Authorization
let getBearertoken = event.headers.Authorization.replace("Bearer ", '');
let isAuhtorized = utilities.apiAuthorazation(getBearertoken);
//Some other Codes
}
正如您所看到的,我将一个不记名令牌传递给了我的子方法,而apiAuthorazation方法将把这个令牌发送给第三方api,方法是这样的:
module.exports.apiAuthorazation = function (token){
let url = process.env.authApiUrl
requestLib(`${url}/${token}`, function (error, response, body) {
if (error) console.log('Error while checking token :', error);
if(response.isValidUser){
return true;
}
else{
return false;
}
});
}
现在我的问题是如何将这个子方法包含在我的主方法单元测试中。我使用mocha和chai进行单元测试,因为berear令牌很快就会到期,所以当我运行测试时,我发送一个带有berear令牌的示例事件,但它已经过期了,所以它没用了。
答案 0 :(得分:1)
在对Api进行单元测试时,可以针对两种情况(对或错)模拟apiAuthorization,并测试Api的行为是否符合预期。当您在此处测试Api时,不必担心在Api测试中子方法内部会发生什么,而重点不在子方法apiAuthorization中正在发生的事情。