Выход компилятора тестирования в node.js
-
28-10-2019 - |
Вопрос
Я хотел бы использовать клятвы для тестирования кода 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)
Но я получаю «Ссылкаерр: CL не определен». Запуск минимизированного JS и new Cl.LinearExpression(5);
В консоли браузера работает нормально, поэтому скомпилированный код в порядке. Как лучше всего загрузить JS в узел для тестирования по клятвам?
Решение 3
Это проблема пространства имен; импорт с
codes = require "../out/compiled.js"
for k,v of codes
global[k] = v
Добавляет все скомпилированные объекты JS в текущее пространство имен, где к ним можно получить доступ.
К сожалению, я до сих пор не знаю, почему использовать eval()
или обратные складки с вставленным содержанием compiled.js
не работает.
Другие советы
А не использовать eval
, почему бы не использовать узел require
? Вы можете указать на либо на .js
или же .coffee
файл в относительный каталог, например:
Cl = require './cl.js'
В этом файле добавьте строку
module.exports = Cl
Когда файл require
D, возвращаемое значение require
это модуль exports
.
Вы можете использовать Backtick для встраивания JavaScript As I's.
`var e=this;function f(a,g){ ... `