Sinonjs:如何模拟 Backbone 获取

Sinonjs: how to mock Backbone fetch

我使用 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", {});

但是在 运行 测试时出现以下错误:

"fetch expected to yield to 'done', but no object with such a property was passed."

我错过了什么?

yieldsTo 在我看来它是用来处理基于回调的代码。

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

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

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

loadData: function () {

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

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