Тестирование выхода компилятора закрытия под Node.js - PullRequest
0 голосов
/ 04 декабря 2011

Я бы хотел использовать Vows для тестирования JavaScript-кода без DOM, в идеале - для прямого запуска скомпилированного JS.Мои обеты написаны на CoffeeScript, но я не уверен, как загрузить мой JS;Я попытался просто вставить его, используя 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)

, но я получаю «ReferenceError: Cl не определен».Запуск минимизированных JS и new Cl.LinearExpression(5); в консоли браузера работает нормально, поэтому скомпилированный код в порядке.Какой лучший способ загрузить JS в узел для тестирования Vows?

Ответы [ 3 ]

2 голосов
/ 04 декабря 2011

Вместо использования eval, почему бы не использовать Node's require? Вы можете указать либо файл .js, либо .coffee в относительном каталоге, например:

Cl = require './cl.js'

В этом файле добавьте строку

module.exports = Cl

Когда файл require d, возвращаемое значение require - это exports.

модуля.
0 голосов
/ 04 декабря 2011

Это проблема пространства имен;импорт с

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

добавляет все скомпилированные объекты JS в текущее пространство имен, где они могут быть доступны в Vows.

К сожалению, я до сих пор не знаю, почему с помощью eval()или backticks с вложенным содержанием compiled.js не работает.

0 голосов
/ 04 декабря 2011

Вы можете использовать backtick для встраивания JavaScript как есть.

`var e=this;function f(a,g){ ... `
...