A parte le probabili dozzine di bug che puoi individuare nel codice qui sotto, mi piacerebbe davvero sapere che cosa la maggior parte delle persone considererebbe il test nel codice qui sotto. Ho 8 funzioni simili esportate, quindi credo che siano quelle che dovrei provare.
Il problema è che chiamano tutti la funzione privata sendTokBoxMessage
, quindi non posso verificare che la funzione venga chiamata. Spostarlo nel proprio modulo sembra eccessivo poiché si tratta già di un piccolo modulo contenuto e aggiungere complessità per motivi di testing mi sembra sbagliato.
Stando così le cose, ho pensato di provare che la richiesta http che sendTokBoxMessage
fa accadere. Ma questo chiama un'altra funzione privata getSessionIdForRoom
, quindi ho bisogno di stubare roomStoreModel
. Devo fare lo stesso per varie altre dipendenze (momento, apiKey, apiSecret) e quindi usare un finto framework http per spiare la richiesta.
Pensi che sia una buona pratica configurare tutto quanto sopra, o è l'opinione che se il modulo è abbastanza piccolo e abbastanza semplice, l'impostazione dei test è più impegnativa di quanto valga?
Grazie.
'use strict';
let request = require('request');
let moment = require('moment');
let jwt = require('jwt-simple');
let logger = require('../business/log_business');
let OpenTokConnection = require('../controllers/opentokConnection');
let ot = OpenTokConnection.ot;
let apiKey = OpenTokConnection.apiKey;
let apiSecret = OpenTokConnection.apiSecret;
let roomStoreModel = require('../model/roomstore_model')(ot, apiKey, apiSecret);
var getSessionIdForRoom = function(roomName) {
return roomStoreModel.getSessionIdForRoom(roomName);
};
var createWebToken = function() {
let now = moment().unix();
let expires = now + 180;
let claims = {'iss': apiKey, 'ist': 'project', 'iat': now, 'exp': expires, 'jti': 'jwt_corp'};
let token = jwt.encode(claims, OpenTokConnection.apiSecret);
return token;
};
var sendTokBoxMessage = function(roomName, endpoint, data) {
getSessionIdForRoom(roomName).then(function(sessionId) {
//Get the web token
var webToken = createWebToken();
//Set the headers
var headers = {
'X-OPENTOK-AUTH': webToken,
'Content-Type': 'application/json'
};
// Configure the request
var options = {
url: 'https://api.opentok.com/v2/project/' + apiKey + '/session/' + sessionId + '/signal',
method: 'POST',
headers: headers,
json: {'type': endpoint, 'data': JSON.stringify(data)},
forever: true
};
// Start the request
request(options, function(error, response) {
if (error || response.statusCode !== 204) {
logger.log('couldnt send tokbox message to endpoint, probably no one left to send to: ' + endpoint, roomName);
}
});
});
};
exports.sendLogMessage = function(roomName, endPoint, data) {
sendTokBoxMessage(roomName, endPoint, data);
};
exports.sendMessageToEveryone = function(roomName, endPoint, data) {
sendTokBoxMessage(roomName, endPoint, data);
logger.log('Sending message to everyone: ' + endPoint, 1, roomName);
};
exports.sendRestartRoomMessage = function(roomName) {
sendTokBoxMessage(roomName, 'restartRoom', {'restart': 'restart'});
logger.log('Sending restart room to everyone', 1, roomName);
};
exports.sendUserUpdateMessage = function(roomName, user, action) {
var data = {'action': action, 'user': user};
sendTokBoxMessage(roomName, 'userUpdated', data);
logger.log('Sending userUpdated room to everyone: ' + user.uid, 1, roomName);
};
exports.sendRoomStateUpdateMessage = function(roomName, roomState) {
sendTokBoxMessage(roomName, 'roomStateUpdate', roomState);
logger.log('Sending roomState update to everyone: ' + JSON.stringify(roomState), 1, roomName);
};
exports.sendChatMessage = function(roomName, message) {
sendTokBoxMessage(roomName, 'chatMessage', message);
logger.log('Sending chat message: ' + JSON.stringify(message), 1, roomName);
};
exports.sendZipDxConnectedMessage = function(roomName) {
sendTokBoxMessage(roomName, 'zipdxConnected', {'null': 'null'});
logger.log('Sending ZipDx connected message', 1, roomName);
};
exports.sendZipDxDisconnectedMessage = function(roomName) {
sendTokBoxMessage(roomName, 'zipdxDisconnected', {'null': 'null'});
logger.log('Sending ZipDx disconnected message', 1, roomName);
};