簡體   English   中英

在Node.js下測試Closure Compiler輸出

[英]Testing Closure Compiler output under Node.js

我想使用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測試的最佳方法是什么?

而不是使用eval ,為什么不使用Node的require 您可以指向相對目錄中的.js.coffee文件,如下所示:

Cl = require './cl.js'

在該文件中,添加該行

module.exports = Cl

當文件被require Ð,的返回值require是模塊的exports

您可以使用反引號按原樣嵌入javascript。

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

這是命名空間問題; 導入

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

將所有已編譯的JS對象添加到當前命名空間,可以在Vows中訪問它們。

不幸的是,我仍然不知道為什么使用eval()或反引號用的內聯內容compiled.js不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM