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:Clisnotdefined」が表示されます。縮小されたJSをnew Cl.LinearExpression(5);ブラウザコンソールで実行すると正常に動作するため、コンパイルされたコードは問題ありません。VowsによるテストのためにJSをノードにロードする最良の方法は何ですか?

4

3 に答える 3

2

を使用するのではなくeval、ノードを使用してみませんrequireか?次のように、相対ディレクトリ内の.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 に答える