Sinonjs:如何模拟Backbone fetch

时间:2017-10-12 10:53:53

标签: backbone.js sinon

我使用Backbone并在accountsView.js中具有以下功能:

loadData: function () {

            this.accountsCollection.fetch()
                .done(_.bind(this.loadDefaultAccounts, this))
                .fail(_.bind(this._accountsLoadFailed, this));
        },

在qunit测试中,我试图像这样嘲笑它:

sandbox.stub(Backbone.Collection.prototype, "fetch").yieldsTo("done", {});

但是在运行test时会出现以下错误:

  

“fetch预计会屈服于'完成',但没有具有此类属性的对象   过去了。“

我错过了什么?

2 个答案:

答案 0 :(得分:1)

yieldsTo看起来像是为了处理基于回调的代码。

要模拟AJAX请求,您应该设置fake server并执行类似

的操作
this.server.respondWith("GET", "/some/article/comments.json",
        [200, { "Content-Type": "application/json" },
         '[{ "id": 12, "comment": "Hey there" }]']);

答案 1 :(得分:0)

非常感谢提示。为了我的测试工作,视图中的函数应该是这样的:

loadData: function () {

            this.accountsCollection.fetch({
                success: _.bind(this.loadDefaultAccounts, this),
                error: _.bind(this._accountsLoadFailed, this),
            });                
        },

或者在@TJ建议中使用测试假服务器。