我想使用Vows来测试无DOM的JavaScript代码,理想情况是直接针对已编译的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测试的最佳方法是什么?
答案 0 :(得分:2)
为什么不使用Node的eval
,而不是使用require
?您可以指向相对目录中的.js
或.coffee
文件,如下所示:
Cl = require './cl.js'
在该文件中,添加
行module.exports = Cl
当文件为require
d时,require
的返回值为模块的exports
。
答案 1 :(得分:0)
您可以使用反引号按原样嵌入javascript。
`var e=this;function f(a,g){ ... `
答案 2 :(得分:0)
这是命名空间问题;用
导入codes = require "../out/compiled.js"
for k,v of codes
global[k] = v
将所有已编译的JS对象添加到当前命名空间,可以在Vows中访问它们。
不幸的是,我仍然不知道为什么在eval()
的内联内容中使用compiled.js
或反引号不起作用。