Sto scrivendo un'applicazione JavaScript a pagina singola utilizzando Backbone e Backbone.Marionette. Sto usando i moduli AMD e RequireJS per aiutare a organizzare il mio codice e gestire le dipendenze. Sto anche usando Mocha come framework di test per TDD/BDD.Come evitare di introdurre perdite globali quando si utilizza Squire.js con RequireJS e Mocha?
Tutto funzionava bene fino a quando non volevo introdurre matrici, mock e spie usando Sinon.JS. Dopo un sacco di ricerche, mi sono imbattuto in una pagina su test frameworks in the RequireJS wiki e Squire.js, che sembrava fosse adatta alle mie esigenze. Tuttavia, quando provo a utilizzare Squire.js per caricare un modulo, Mocha segnala improvvisamente perdite globali per le dipendenze del modulo. Non ci sono perdite segnalate se carico il modulo direttamente usando Require.JS.
Ad esempio, il seguente codice di prova non causa Mocha per segnalare eventuali perdite:
define(['app/app'], function(app) {
describe('App', function() {
it('Should define a \'header\' region', function() {
expect(app.headerRegion).to.exist;
});
it('Should define a \'main\' region', function() {
expect(app.mainRegion).to.exist;
});
});
return {
name: "App"
};
});
Tuttavia, convertendo il codice per utilizzare Squire.js come segue provoca Mocha segnalare perdite per jQuery, spina dorsale, e Marionette (dipendenze di app.js):
define(['Squire'], function(Squire) {
describe('App', function() {
var testContext = {};
beforeEach(function(done) {
testContext.injector = new Squire();
testContext.injector.require(['app/app'], function(app) {
testContext.app = app;
done();
});
});
it('Should define a \'header\' region', function() {
expect(testContext.app.headerRegion).to.exist;
});
it('Should define a \'main\' region', function() {
expect(testContext.app.mainRegion).to.exist;
});
});
return {
name: "App"
};
});
che cosa sto facendo di sbagliato? Sono totalmente sconcertato dal fatto che Mocha non segnala una perdita con RequireJS ma fa con Squire.js. Ho anche provato alcune delle altre soluzioni che ho trovato in un altro StackOverflow question on mocking RequireJS dependencies, come la funzione personalizzata e testr.js, prima di Squire.js e aveva risultati simili. Ad oggi, non sono riuscito a trovare un esempio che utilizzi Mocha, RequireJS e Sinon.JS tutti insieme.
Ho placed my current code base on GitHub nel caso in cui ci siano alcune informazioni critiche che ho lasciato fuori o qualcosa del genere. Il test in questione può essere trovato in test\spec\test.app.js.
Qualsiasi assistenza è molto apprezzata. Mi piacerebbe molto andare oltre la monkeying con la mia configurazione di test e su per lavorare effettivamente sulla mia app. Grazie in anticipo.