TypeError:'undefined'不是函数(评估'sinon.spy()')

时间:2013-12-13 15:38:51

标签: javascript backbone.js sinon

我正在尝试使用sinon.js来测试骨干应用程序。但不幸的是,由于错误,我无法使用间谍方法:

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

以下是重现错误的步骤:

  1. 使用backbone yeoman generator
  2. 创建一个空项目
  3. 安装sinon:cd test && bower install sinon
  4. 包含在test / index.html <script src="bower_components/sinon/lib/sinon.js"></script>
  5. 在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;
            });
        });
    });
    
  6. 使用grunt运行测试:grunt test

  7. 测试将失败并显示错误。

  8. 任何人都可以帮忙找出问题所在吗?

4 个答案:

答案 0 :(得分:14)

如果sinon加载为<script>require.js(作为AMD模块)加载,{I}}只会留下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" 之外的任何其他内容:

{{1}}

随意跳过任何一个但是希望sinon以奇怪的方式失败。

答案 1 :(得分:13)

事实证明,应该通过包含来自lib/sinon文件夹的脚本手动添加间谍,存根等功能。安装部分提到了这一事实。由于核心sinon.js文件的代码仅在Node.js环境中,因此它会自动完成。

答案 2 :(得分:1)

我遇到了与sinon 1.17.2和Chrome 47.0相同的问题。在尝试了上述解决方案及其变体之后,我最终使用了核选项并切换到Jasmine

对于我的测试套件,只需要大约15分钟的时间进行一些全局查找和替换即可转换我的预期&#39;进入Jasmine,并在语法之前围绕摩卡的一些差异; Jasmine清楚地标记了意外的语法。 Jasmine spy objects是罪人的好替代品。

答案 3 :(得分:0)

与其他答案不同,我没有通过包含每个单独的源文件来手动安装simon。相反,我遵循了How To Install Sinon.JS In The Browser With Bower的建议。

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>

为我工作。