class FetchTenant {
constructor (){
this.Config = this._getConfig();
this.Token = this._getToken();
this.TenantMap = new Map();
}
async getTenantId(Id){
if(!this.TenantMap[Id]){
const serviceid = await this._getInfo(Id, false);
this.TenantMap[Id] = serviceid;
}
return this.TenantMap[Id];
}
_getConfig() {
return get_env_from_local({ name: 'env_1' });
}
async _getToken() {
const options = {
method: 'POST',
uri: `${this.Config.url}`,
json: true,
resolveWithFullResponse: false,
transform2xxOnly: true,
transform: body => body.access_token,
auth: {
username: this.Config.clientid,
password: this.Config.clientsecret
},
form: {
grant_type: 'client_credentials'
},
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
};
return request(options)
.catch(err => {
logger.error('Could not get Token', err.statusCode, err.message);
return null;
});
}
async _getInfo(Id, newtoken) {
if(newtoken){
this.accessToken = await this._getToken();
if(this.accessToken == null){
logger.error(`fetching token failed`);
return null;
}
}
const options = {
method: 'GET',
uri: `${this.Config.url}/xyz/${Id}`,
json: true,
resolveWithFullResponse: false,
transform2xxOnly: true,
transform: body => body.tenantId,
auth: {
bearer: this.accessToken
},
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
};
return request(options)
.catch(err => {
if(err.statusCode != 401) {
logger.error(`Could not get tenant id`, err.statusCode, err.message);
return null;
}
else {
return this._getServiceInstanceInfo(Id, true);
}
});
}
}
module.exports = FetchTenant;
это класс, который я создал.
как написать модульный тест для этого класса, используя sinon (заглушка и макет), мне нужно протестировать только функции publi c и единственная функция publi c здесь getTenantId(Id)
, где во всех других закрытых функциях есть http-запрос, который может дать либо правильный ответ, либо ошибку.
есть ли способ протестировать publi c функция, высмеивая все другие частные функции. я хочу предварительно определить данные, которые будут возвращаться каждой частной функцией, и первичные данные, которые они извлекают из env и используют для отправки запроса.