0

我想使用 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 未定义”。在浏览器控制台中运行缩小的 JSnew Cl.LinearExpression(5);可以正常工作,因此编译后的代码是可以的。将 JS 加载到节点以供 Vows 测试的最佳方法是什么?

4

3 回答 3

2

与其使用eval,为什么不使用 Node 的require?您可以指向相对目录中的a.js或文件,如下所示:.coffee

Cl = require './cl.js'

在该文件中,添加该行

module.exports = Cl

当文件为required 时,返回值为require模块的exports.

于 2011-12-04T18:04:06.960 回答
0

您可以使用反引号按原样嵌入 javascript。

`var e=this;function f(a,g){ ... `
于 2011-12-04T18:02:12.690 回答
0

这是一个命名空间问题;导入

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

将所有已编译的 JS 对象添加到当前命名空间,在 Vows 中可以访问它们。

不幸的是,我仍然不知道为什么eval()对内联内容使用或反引号compiled.js不起作用。

于 2011-12-04T19:27:10.057 回答