Stasera ero qui con un test (acceptance) cercando di accrocchiarlo alla meglio.
In sostanza usando jsdom e jest ho del codice legacy che utilizza jquery (versione vecchissima) e il js è nella pagina. Lo incollo in un file separato, prepare.js. E visto che devo caricarlo tramite node lo metto dentro una funzione che chiamo con parametro $ (che è la jQuery). Tipo:
let start = ($) => { $(function() { var actions = ActionGroup($("#actions")); .... // e blablabla function loadExample() { const fs = require('fs'); var exJson = fs.readFileSync(.....) actions.loadObject(JSON.parse(exJson); } loadExample(); }) } module.exports = start
Quindi posso eseguire un solo caso, testare un solo json. (e devo usare anche un timeout a caso per prima di fare expect blabla)
Ora arriva un nuovo caso da controllare, un nuovo json. E qui ho un attimo di delirio, penso che forse dovrei trasformare il tutto in una funzione, da usare come class, cioè instanziarla tramite la new … Oppure uso una promise che risolve in una function. Cioè:
let start = ($) => { return new Promise((resolve, reject) => { $(function() { actions e blablabla .... . ... function loadExample(filename) { // parametro ..... ..} resolve(loadExample); }); }); // non chiamo mai reject() }; module.exports = start
e così quando la vado a chiamare ho:
let prepare = require('./prepare'); prepare(window.$).then((loadAction) => { loadAction('./path/tothe1.json'); expect(window.$('#selector').html()).equals(blabla1); loadAction('./path/tothe2.json'); expect(window.$('#selector').html()).equals(blabla2); }) .catch( (err) => expect(false).equals(true) )
Siccome sono poco funzionale il cambiare 2 righe per ottenere questo m’è sembrata una figata