Frage

Ich fange gerade erst mit Node.js, Mocha und Browserify an.

Ich habe ein Modul, das von jQuery abhängt, und meine Spezifikation dafür hängt auch von jQuery ab.Um es einfach zu tun require('jquery') im Modul, im Gegensatz zu require('jquery')(window), ich habe ein jsdom erstellt window in meiner Spezifikationsdatei gespeichert und zugewiesen global.window:

var $;

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

    global.window = doc.createWindow();

    $ = require('jquery');

    ...
});

Auf diese Weise können meine Spezifikationen jQuery verwenden, um DOM-Knoten zu finden und Erwartungen zu testen, und mein Modul kann jQuery verwenden, ohne dass a explizit übergeben werden muss window.

Das scheint alles gut zu funktionieren, aber ist es das „Richtige“?Ich habe viel gesucht und kann keinen anderen Hinweis auf die Verwendung finden global.window auf diese Weise an jQuery übergeben.Technisch gesehen, nehme ich an window ist eine Abhängigkeit für mein Modul, daher sollte ich sie explizit an mein Modul übergeben und mit dem Aufruf leben require('jquery')(window) anstatt require('jquery')?

Was ist die gängige Praxis zum Erstellen von CommonJS-Modulen, die jQuery erfordern?

War es hilfreich?

Lösung 2

Nachdem ich bei verschiedenen Beispielen auf weitere Probleme mit mehreren DOMs (erstellt mit jsdom) gestoßen war, wurde mir mein Fehler klar.Anstatt jQuery in meinen Spezifikationen und Modulen zu fordern, sollte ich es tun nur Ich benötige es in meinen Spezifikationen und übergebe es als Abhängigkeit an meine Module.d.h.Die Module sollten nicht require('jquery') überhaupt.

Als mir das klar wurde, schien es mir selbstverständlich, weshalb ich wahrscheinlich Schwierigkeiten hatte, relevante Dokumentation online zu finden.

Andere Tipps

Wenn Sie vermeiden möchten, ist das Machen window eine globale, Sie können Ihre übergeben window Einspruch gegen die jquery Modul, etwa so:

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"));
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top