我正在尝试使用sinon.js来测试骨干应用程序。但不幸的是,由于错误,我无法使用间谍方法:
TypeError: 'undefined' is not a function (evaluating 'sinon.spy()')
以下是重现错误的步骤:
cd test && bower install sinon
<script src="bower_components/sinon/lib/sinon.js"></script>
在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;
});
});
});
使用grunt运行测试:grunt test
测试将失败并显示错误。
任何人都可以帮忙找出问题所在吗?
答案 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>
为我工作。