Frage

Ich möchte Gelübde verwenden, um den DOM-freien JavaScript-Code zu testen, der idealerweise direkt mit dem kompilierten JS ausgeführt wird. Meine Gelübde sind in Coffeescript geschrieben, aber ich bin mir nicht sicher, wie ich meine JS laden soll. Ich habe versucht, es nur mit dem Miteinander zu integrieren eval:

vows = require "vows"
assert = require "assert"
eval('var e=this;function f(a,g){var c=a.split("."),b=e;!(c[0]in b)&&b.execScript&&b.execScript("var "+c[0]);for(var d;c.length&&(d=c.shift());)!c.length&&g!==void 0?b[d]=g:b=b[d]?b[d]:b[d]={}}function h(a){a.call(e)};(function(){var a;a={};h(function(){a=function(a){this.a=a};a.prototype.b=function(a){return this.a+a.a};f("Cl.LinearExpression",a);f("Cl.LinearExpression.prototype.plus",a.prototype.b)})}).call(this);');

vows
  .describe("Linear Expression")
  .addBatch
    "initialized with a number":
      topic: -> new Cl.LinearExpression 5

      "adds up with scalar": (cle) -> assert.equal 7, cle.plus 2

  .export(module)

Aber ich bekomme "ReferenceError: Cl ist nicht definiert". Ausführen der Minified JS und new Cl.LinearExpression(5); In einer Browserkonsole funktioniert einwandfrei, sodass der kompilierte Code in Ordnung ist. Was ist der beste Weg, JS in Knoten zum Testen durch Gelübde zu laden?

War es hilfreich?

Lösung 3

Dies ist ein Namespace -Problem; Import mit

codes = require "../out/compiled.js"
for k,v of codes
  global[k] = v

Fügt alle kompilierten JS -Objekte zum aktuellen Namespace hinzu, in dem sie in Gelübden zugegriffen werden können.

Leider weiß ich immer noch nicht, warum ich benutze eval() oder Backticks mit dem eingefügten Inhalt von compiled.js funktioniert nicht.

Andere Tipps

Anstatt zu verwenden eval, warum nicht Knoten verwenden? require? Sie können auf beide hinweisen .js oder .coffee Datei in einem relativen Verzeichnis wie SO:

Cl = require './cl.js'

Fügen Sie in dieser Datei die Zeile hinzu

module.exports = Cl

Wenn die Datei ist requireD, der Rückgabewert der require ist das Modul des Moduls exports.

Sie können JavaScript as-is verwenden, um JavaScript einzubetten.

`var e=this;function f(a,g){ ... `
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top