Question

Je débute tout juste avec Node.js, Mocha et Browserify.

J'ai un module qui dépend de jQuery, et mes spécifications dépendent également de jQuery.Afin de faire simplement require('jquery') dans le module, par opposition à require('jquery')(window), j'ai créé un jsdom window dans mon fichier de spécifications et je l'ai attribué à global.window:

var $;

beforeEach(function () {
    var doc = jsdom.jsdom('<html><body></body></html>');

    global.window = doc.createWindow();

    $ = require('jquery');

    ...
});

De cette façon, mes spécifications peuvent utiliser jQuery pour trouver des nœuds DOM et tester les attentes, et mon module peut utiliser jQuery sans avoir à recevoir explicitement un window.

Tout cela semble fonctionner correctement, mais est-ce la « bonne » chose à faire ?J'ai beaucoup cherché et je n'ai trouvé aucune autre mention de l'utilisation global.window de cette façon pour passer à jQuery.Techniquement, je suppose window est une dépendance pour mon module, dois-je donc la transmettre explicitement à mon module et vivre avec l'appel require('jquery')(window) au lieu de require('jquery')?

Quelle est la pratique courante pour créer des modules CommonJS nécessitant jQuery ?

Était-ce utile?

La solution 2

Après avoir rencontré plus de problèmes avec plusieurs DOM (créés à l'aide de jsdom) pour différents exemples, j'ai réalisé mon erreur.Au lieu d'exiger jQuery dans mes spécifications et dans mes modules, je devrais seulement l'exiger dans mes spécifications et le transmettre dans mes modules en tant que dépendance ;c'est à dire.les modules ne devraient pas require('jquery') du tout.

Une fois que j'ai réalisé cela, cela m'a semblé évident, c'est probablement la raison pour laquelle j'ai eu du mal à trouver de la documentation pertinente en ligne.

Autres conseils

Si ce que tu veux c'est éviter c'est faire window un global, vous pouvez passer votre window s'opposer à la jquery module, comme ceci :

var jsdom = require("jsdom");
var $;

beforeEach(function () {
    var doc = jsdom.jsdom('<html><body></body></html>');

    var window = doc.createWindow();

    $ = require('jquery')(window);
});

it("foo", function() {
    console.log($("body"));
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top