Dopo una breve storia d'amore con il modello del modulo rivelatore, sono arrivato a realizzare un arretramento quando si tratta di moduli di test unitari. Non riesco tuttavia a decidere se è il mio approccio a testare un modulo o se c'è qualche forma di soluzione.Rivelazione del modello del modulo - Test dell'unità con Jasmine
Si consideri il seguente codice:
var myWonderfulModule = (function() {
function publicMethodA (condition) {
if(condition === 'b') {
publicMethodB();
}
}
function publicMethodB() {
// ...
}
return {
methodA : publicMethodA,
methodB : publicMethodB
}
}());
Se ho voluto mettere alla prova (utilizzando Jasmine) i vari sentieri che attraversano publicMethodA a publicMethodB. Potrei scrivere un piccolo test in questo modo:
it("should make a call to publicMethodB when condition is 'b'", function() {
spyOn(myWonderfulModule , 'publicMethodB');
myWonderfulModule.publicMethodA('b');
expect(myWonderfulModule.publicMethodB).toHaveBeenCalled();
});
Se ho capito bene, c'è una copia della publicMethodB all'interno della chiusura, che non può essere cambiato. Anche se cambio myWonderfulModule.publicMethodB in seguito:
myWonderfulModule.publicMethodB = undefined;
chiamando myWonderfulModule.publicMethodA
sarà ancora eseguire la versione originale di B.
L'esempio di cui sopra è ovviamente semplificata, ma ci sono un sacco di scenari che posso pensare dove sarebbe conveniente per unit test percorsi condizionali attraverso un metodo.
Questa è una limitazione del modulo del modulo rivelatore o semplicemente un uso improprio del test dell'unità? Se no, quali soluzioni sono disponibili per me? Sto considerando di passare a qualcosa come RequireJS o tornare al codice non modulare.
Qualche consiglio apprezzato!