从main方法调用的子方法的单元测试,包括http-request authoraztion

时间:2018-06-13 03:46:04

标签: javascript node.js unit-testing mocking mocha

我遇到了一个非常复杂的场景,希望你们给我一个暗示。

所以我有一个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令牌的示例事件,但它已经过期了,所以它没用了。

1 个答案:

答案 0 :(得分:1)

在对Api进行单元测试时,可以针对两种情况(对或错)模拟apiAuthorization,并测试Api的行为是否符合预期。当您在此处测试Api时,不必担心在Api测试中子方法内部会发生什么,而重点不在子方法apiAuthorization中正在发生的事情。