Sinonjs:如何模拟 Backbone 获取

f2uvfpb9  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(99)

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

但在运行测试时得到以下错误:
提取应生成“完成,”但没有传递具有此属性得对象.
我错过了什么?

0md85ypi

0md85ypi1#

yieldsTo在我看来似乎是用来处理基于回调的代码。
要模拟 AJAX 请求,您应该设置一个fake server并执行以下操作

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

deyfvvtc2#

所以感谢提示.为了我的测试工作的函数在视图应该像这样:

loadData: function () {

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

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

相关问题