诗乃找不到方法'间谍'

时间:2013-08-22 21:40:27

标签: javascript backbone.js mocha sinon chai

我正在努力攀登使用require.js / mocha / chai / sinon和骨干应用的学习曲线。当我运行this test时:

define([
    "chai",
    "sinon"
], function(chai, sinon){
    var expect = chai.expect;

    describe("Trying out the test libraries", function(){
        describe("Chai", function(){
            it("should be equal using 'expect'", function(){
                expect(hello()).to.equal("Hello World");
            });
        });

        describe("Sinon.JS", function(){
            it("should report spy called", function(){
                var helloSpy = sinon.spy(window, "hello");

                expect(helloSpy.called).to.be.false;
                hello();
                expect(helloSpy.called).to.be.true;
                hello.restore();
            });
        });
    });
});

我得到TypeError: Object #<Object> has no method 'spy' on the line where helloSpy is defined。为什么?请注意,第一次测试通过。

这是完整的项目:

https://github.com/ErikEvenson/spa-testing-study/tree/bcc5b71b3b6f8b24f7e8d01673b50682498ee1b2

注意使用该特定提交。

2 个答案:

答案 0 :(得分:7)

这里的问题证明,sinon的bower存储库不可用,因为每this issue。必须首先构建Sinon并且正在执行bower install sinon只会将Sinon.JS repo拉下来。使用bower install sinonjs代替bower install sinon可以使用,但会提供较早的版本号。

答案 1 :(得分:4)

来自@Erik链接。

install --save-dev sinonjs-built

这将让你构建sinon版本。

修改

另一个凉亭版本(如上所述@Erik建议)可在https://github.com/blittle/sinon.js

中找到

可以通过安装它 install --save-dev sinonjs

编辑2

来自sinon github

  

重要:AMD需要预先构建的版本     Sinon.JS作为源代码并不适用于AMD加载器(当它们异步时,例如通过浏览器中的脚本标签加载)。为此,您将不得不使用预先构建的版本。您可以自己构建它,也可以从http://sinonjs.org获取编号版本。

解决方案:告诉bower sinon文件的直接链接

您可以编辑bower.json文件。而不是写版本只是为url传递file

[...]
"devDependencies": {
     "chai": "~1.10.0",
    "sinon": "http://sinonjs.org/releases/sinon-1.12.2.js#*",
 },
[...]