Beim Schreiben von Tests habe ich Bug TypeError: $.extend is not a function
auf Toastr Plugin, das wir verwenden. Es scheint, dass jQuery nicht richtig aufgenommen wird, selbst wenn es normal im Browser funktioniert.Probleme beim Definieren von Modulen mit AMD in Mocha
In unserem Haupt Mock-Datei importiert wir jQuery und binden an globalen Windows-Objekt und es ist zugänglich über ganze Anwendung (aber toastr Plugin), auch während des Tests in Mokka:
import jsdom from 'jsdom';
import $ from 'jquery';
import chai from 'chai';
import chaiImmutable from 'chai-immutable';
import React from 'react';
const doc = jsdom.jsdom('<!doctype html><html><body></body></html>');
const win = doc.defaultView;
global.document = doc;
global.window = win;
global.expect = chai.expect;
global.$ = $(win);
global.jquery = $(win);
global.jQuery = $(win);
Object.keys(window).forEach((key) => {
if (!(key in global)) {
global[key] = window[key];
}
});
chai.use(chaiImmutable);
So, während näherem Hinsehen auf toastr ich dies bemerkt:
; (function (define) {
define(['jquery'], function ($) {
// this function is called on inizialization
function getOptions() {
return $.extend({}, getDefaults(), toastr.options);
}
es dauert jquery
von node_modules direkt und definiert dann Objekt $
in Funktionsumfang, das bedeutet, dass es window.$
ist zu ignorieren (welche arbeitet normalerweise sogar hier).
Daher Logging $
wird Funktion zurückgeben, und die Protokollierung $ .anyMethodFromjQuery ($.extend
) wird undefined zurückgeben.
Am Ende habe ich versucht, $ .prototype anmelden, im Browser wird es mir jQuery-Objekt zurück, während in Mokka es leeres Objekt {}
Also am Ende gibt es nicht erstellt Prototyp in Mokka-Umgebung definiert haben und Ich kann nicht eine Zeile Code $ = window.$;
in Plugin hinzufügen, da niemand ein Plugin bearbeiten sollte + wir npm verwenden.
Gibt es dafür eine Lösung?
Wie wird 'toastr' geladen? – Louis
Mit npm, in der Anwendung verwende ich nur 'Import toastr von 'toastr''; – Arcagully