Sortie test de fermeture du compilateur sous Node.js
-
28-10-2019 - |
Question
Je voudrais utiliser Serment pour tester le code JavaScript sans DOM, idéalement en cours d'exécution directement contre la JS compilé.
Mes vœux sont écrits en CoffeeScript, mais je ne suis pas sûr de savoir comment charger mes JS; J'ai essayé juste inline à l'aide 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)
mais je reçois "ReferenceError: Cl n'est pas défini".
Exécution de la JS et new Cl.LinearExpression(5);
minified dans une console de navigateur fonctionne très bien, de sorte que le code compilé est correct.
Quelle est la meilleure façon de charger JS dans le noeud pour tester par Serment?
La solution 3
Ceci est un problème d'espace de noms; importation avec
codes = require "../out/compiled.js"
for k,v of codes
global[k] = v
ajoute tous les objets JS compilé à l'espace de noms actuel, où ils sont accessibles profès.
Malheureusement, je ne sais toujours pas pourquoi l'aide eval()
ou avec le contenu des accents graves inline de compiled.js
ne fonctionne pas.
Autres conseils
Plutôt que d'utiliser eval
, pourquoi ne pas utiliser le require
de nœud? Vous pouvez pointer vers un fichier de .js
ou .coffee
dans un répertoire relatif, comme suit:
Cl = require './cl.js'
Dans ce fichier, ajoutez la ligne
module.exports = Cl
Lorsque le fichier est require
d, la valeur de retour de la require
est le exports
du module.
Vous pouvez utiliser backtick à javascript Embed tel quel.
`var e=this;function f(a,g){ ... `