Prueba de salida del compilador de cierre bajo Node.js
-
28-10-2019 - |
Pregunta
Me gustaría usar votos para probar el código JavaScript sin DOM, idealmente ejecutándose directamente con el JS compilado. Mis votos están escritos en CoffeeScript, pero no estoy seguro de cómo cargar mi JS; He intentado simplemente insertarlo usando 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)
Pero obtengo "referenceError: CL no está definido". Ejecutando el JS minificado y new Cl.LinearExpression(5);
En una consola del navegador funciona bien, por lo que el código compilado está bien. ¿Cuál es la mejor manera de cargar JS en el nodo para las pruebas por votos?
Solución 3
Este es un problema de espacio de nombres; importación con
codes = require "../out/compiled.js"
for k,v of codes
global[k] = v
Agrega todos los objetos JS compilados al espacio de nombres actual, donde se puede acceder en los votos.
Desafortunadamente, todavía no sé por qué usar eval()
o retroceso con el contenido en línea compiled.js
no funciona.
Otros consejos
En lugar de usar eval
, ¿por qué no usar nodos? require
? Puedes señalar cualquiera .js
o .coffee
Archivo en un directorio relativo, como así:
Cl = require './cl.js'
En ese archivo, agregue la línea
module.exports = Cl
Cuando el archivo es require
D, el valor de retorno del require
es el módulo exports
.
Puede usar Backtick para incrustar JavaScript As-IS.
`var e=this;function f(a,g){ ... `