Frage Wie testet man das jQuery-Plugin über die Kommandozeile mit Jasmine und Node?


Ich habe jQuery-Plugin, das ich teste. Ich habe diese Frage gefunden: Wie man Jasmine-Tests auf Node.js von der Befehlszeile aus ausführt? aber wenn ich renne:

node_modules/jasmine-node/bin/jasmine-node --verbose --junitreport --noColor spec

Ich habe Fehler, dass $ nicht definiert ist. Wie kann ich jQuery einbeziehen? (Im Moment teste ich nur Dienstprogramme, die nicht mit dem Dom interagieren).


6
2018-06-18 10:40


Ursprung


Antworten:


Sie müssen zuerst ein DOM erstellen, auf das jQuery zugreifen kann. Sie sollten dies als globale Variable einrichten, da Sie wahrscheinlich auf jQuery (oder $) für das Fensterelement zugreifen.

Fügen Sie zunächst jquery und jsdom zu Ihrer package.json-Datei hinzu, z. B .:

  "dependencies": {
    "jquery": "*"
  },
  "devDependencies": {
    "jsdom": "*"
  }

Lauf npm install um die neuen Abhängigkeiten zu installieren, die Sie gerade hinzugefügt haben.

Führen Sie dann oben in Ihrer Spezifikationsdatei Folgendes aus:

var jsdom = require("jsdom").jsdom;
global.window = jsdom().parentWindow;
global.jQuery = global.$ = require("jquery")(window);

Dies erzeugt ein Fensterelement, das jsdom verwendet, und lässt jquery wissen, auf was es sich auswirken soll. Sie sollten nun auf beide zugreifen können jQuery und $ in deinen Spezifikationen.


3
2018-01-19 16:31



Durch Versuch und Irrtum kam ich mit diesem Code, der mit jQuery und jsdom in Jasmine-Node-Spezifikationsdatei arbeiten:

if (typeof window === 'undefined') {
    var jsdom = require("jsdom");
    global.document = jsdom.jsdom();
    global.window = global.document.parentWindow;
    var navigator = {userAgent: "node-js", platform: "Linux i686"};
    global.window.navigator = global.navigator = navigator;
    navigator.platform = "Linux i686";
    global.jQuery = global.$ = require("jquery");
}

0
2017-12-31 21:54



Verwenden Sie jsdom v7.2.2 und node v4.2.4. Ich habe es mit folgendem Code arbeiten lassen:

var jsdom = require("jsdom").jsdom;
global.window = jsdom().defaultView;
global.jQuery = global.$ = require("jquery");
var myModuleThatReliesOnJquery = require("./myModuleThatReliesOnJquery.js");

0
2018-01-07 17:49



Ich hatte Schwierigkeiten, das auch zu schaffen. Was ich gefunden habe funktioniert (auf der Jsdom Github Seite gehen: https://github.com/tmpvar/jsdom) soll folgendes tun.

Installieren Sie die folgenden zwei Pakete (wie von Farid vorgeschlagen):

npm install jquery --save
npm install jsdom --save-dev

Geben Sie dann oben in der Spezifikationsdatei (Testdatei) Folgendes ein:

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM(`<!DOCTYPE html>`);

global.jQuery = global.$ = require("jquery")(window); 
global.window = window;
global.document = window.window;

Jetzt hast du dich festgelegt $, window und document global. Dies ist das erste Mal, dass ich Javascript benutze. Wenn ich also etwas falsch gemacht habe, lass es mich wissen!

P.S. Es gibt eine gute Möglichkeit, Ihre Tests mit npm auszuführen (ich habe es von hier gelernt: https://www.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/). In deinem package.json Datei hinzufügen einen Abschnitt "Skripte", z.

{
  "dependencies": {
    "jquery": "^3.2.1"
  },
  "devDependencies": {
    "jasmine-node": "^1.14.5",
    "jsdom": "^10.1.0"
  },
  "scripts": {
    "test": "jasmine-node --verbose --color spec/*"
  }
}

Jetzt können Sie Ihre Tests ausführen, indem Sie einfach Folgendes eingeben:

npm run test

oder nur npm test kurz gesagt.


0
2018-05-11 17:02