Extraer un modulo, testearlo y sustituirlo por el anterior

Duplicar el codigo en un nuevo objeto, exportar este si no lo estaba para que sea accesible desde fuera y comenzar el test. Una vez ya podemos testearlo hacer los test necesarios. Con ello podremos comenzar a cambiar el modulo y a hacer el refactor.

Esto es como se hacia en ES5

let saberganar = saberganar || {};
(function(namespace) {
    namespace.questionNavigator = function (question) {
        // all implementation code here
    }
})(saberganar);

comprobamos si nuestro namespace saberganar existe, si no partimos de uno vacio, y le añadimos a este nuestro modulo nuevo questionNavigator.

let saberganar = saberganar || {};
saberganer.questionNavigator = function (question) {
    // all implementation code here
}

una vez tenemos esta funcion creada en un fichero a parte hacemos que nuestra aplicacion acepte como parametro una funcion la cual sera nuestro nuevo modulo que acabamos de exportar y hacer el refactor.

var saberganar = saberganar || {};

saberganar.game = function(questionNavigator){
    function start(){
        theQuestionNavigator = questionNavigator;
        // [...]
    }
    // [...]
}

*Nota: el let saberganar da problemas tiene que definirse con var, puede que sea por el contexto o por como funciona el let

Extraer en ES6

Partimos de un fichero con toda la aplicacion

patron factory en el window.onload ... construye la aplicacion todas sus partes en este caso solamente es una, poner el questionsNavigator