2

私はjasmine-nodeを使用してjavascriptコードの単体テストを行っています。スパイオンして、元の実装への呼び出しを許可したいグローバル関数がいくつかあります。例として、以下のコードを参照してください。

説明できない理由で、「globalFunction()メソッドが存在しません」というエラーが表示されます。

ジャスミンがグローバルスコープにあると私が理解しているこのglobalFunctionメソッドを見つけられない理由を誰かに教えてもらえますか?

私は助けに感謝します

var globalFunction = function() {
    console.log('globalFunction');
};

describe("A Global Function", function() {
    jasmine.getEnv().addReporter(new jasmine.ConsoleReporter(console.log));
    it("may be spied upon", function() {
        spyOn(global,'globalFunction').andCallThrough();
        globalFunction();
        expect(globalFunction).toHaveBeenCalled();
    });
});

これがジャスミンノードの出力です

$ jasmine-node  --verbose test.spec.js 
Runner Started.
A Global Function : may be spied upon ... 
Failed.
A Global Function: 0 of 1 passed.

A Global Function
  may be spied upon

Failures:

  1) may be spied upon
   Message:
     globalFunction() method does not exist
   Stacktrace:
     undefined

Finished in 0.008 seconds
1 test, 1 assertion, 1 failure


Runner Finished.
1 spec, 1 failure in 0.008s.    
4

1 に答える 1

3

実際、あなたglobalFunctionはグローバルではありません。varキーワードを削除してグローバルにします。

globalFunction = function() {
    console.log('globalFunction');
};

ブラウザでは、最上位のスコープはグローバルスコープです。つまり、ブラウザでグローバルスコープvarを使用している場合、何かがグローバル変数を定義します。ノードではこれは異なります。トップレベルスコープはグローバルスコープではありません。ノードモジュール内のvar何かは、そのモジュールに対してローカルになります。

于 2012-09-03T17:37:31.300 に答える