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 的建议在测试中使用假服务器。
我使用 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 的建议在测试中使用假服务器。