web-dev-qa-db-ja.com

TypeError: 'undefined'は関数ではありません( 'sinon.spy()'を評価しています)

バックボーンアプリケーションのテストで sinon.js を使用しようとしています。しかし、残念ながら、エラーのためにスパイメソッドを使用できません。

TypeError: 'undefined' is not a function (evaluating 'sinon.spy()')

エラーを再現する手順は次のとおりです。

  1. バックボーンヨーマンジェネレーター で空のプロジェクトを作成します
  2. Sinonをインストールします:cd test && bower install sinon
  3. Test /index.htmlに含める<script src="bower_components/sinon/lib/sinon.js"></script>
  4. Test/spec/test.jsでスパイを作成します:

    describe('Give it some context', function () {
        describe('maybe a bit more context here', function () {
            it('should run here few assertions', function () {
              var spy = sinon.spy();
              spy.should.be.ok;
            });
        });
    });
    
  5. うなり声でテストを実行します:grunt test

  6. 記述されたエラーでテストは失敗します。

誰かが何が悪いのかを見つけるのを手伝ってもらえますか?

18
Sergey

スパイ、スタブなどの機能は、lib/sinonフォルダーからスクリプトを含めることによって手動で追加する必要があることが判明しました。この事実は、インストールのセクションで説明されています。また、Node.js環境でのみコアsinon.jsファイルのコードがあるため、自動的に実行されます。

13
Sergey

sinon<script>またはrequire.js(AMDモジュールとして)としてロードされた場合にロードするのを都合よく忘れるファイルのリストをここに残しておきます-基本的にはnode.js

"sinon/lib/sinon.js",
"sinon/lib/sinon/spy.js",
"sinon/lib/sinon/call.js",
"sinon/lib/sinon/behavior.js",
"sinon/lib/sinon/stub.js",
"sinon/lib/sinon/mock.js",
"sinon/lib/sinon/collection.js",
"sinon/lib/sinon/assert.js",
"sinon/lib/sinon/sandbox.js",
"sinon/lib/sinon/test.js",
"sinon/lib/sinon/test_case.js",
"sinon/lib/sinon/match.js"

それらのいずれかをスキップしてかまいませんが、sinonが不思議な方法で失敗することを期待してください。

14
Kamil Szot

Sinon1.17.2とChrome 47.0で同じ問題が発生しました。上記の解決策とそれらのバリエーションを試した後、核オプションを使用して Jasmine に切り替えました。 =。

私のテストスイートでは、チャイの「期待」をジャスミンのものに変換するのに、グローバルな検索と置換を約15分しかかからず、構文の前にモカに関するいくつかの違いがありました。ジャスミンは予期しない構文に明確にフラグを立てました。 ジャスミンスパイオブジェクト はシノンの素晴らしい代替品でした。

1
Jason

他の回答とは異なり、個々のソースファイルを含めて手動でsimonをインストールしませんでした。代わりに、 Bowerを使用してブラウザにSinon.JSをインストールする方法 のアドバイスに従いました。

bower install http://sinonjs.org/releases/sinon-1.17.6.js

その後

bower list -p 
 'sinon-1.17.6': 'bower_components/sinon-1.17.6/index.js'

そして

 <script src="bower_components/sinon-1.17.6/index.js"></script>

私のために働いた。

0
user2964500