如何在我的模型 st 中伪造一个 REST 响应,它并没有真正进入服务,而是返回一个固定的 json?
如果可能的话,给我展示一个覆盖sync()的版本和一个覆盖fetch()的版本。我两者都失败了,所以这将是一个很好的教育,因为它们之间的区别。
如何在我的模型 st 中伪造一个 REST 响应,它并没有真正进入服务,而是返回一个固定的 json?
如果可能的话,给我展示一个覆盖sync()的版本和一个覆盖fetch()的版本。我两者都失败了,所以这将是一个很好的教育,因为它们之间的区别。
Backbone.Model.extend({
fetch: function(){
var model = this;
model.set({yourStatic: "Json Here"});
}
}
这应该有效。从骨干文档:
fetch()
:通过委托给 Backbone.sync 从服务器重置模型的状态
如果您的问题与不需要实时 API 的单元测试代码有关,请查看Sinon.JS。它有助于模拟整个 API 服务器响应以进行测试。
下面是一个来自 Sinon 文档的示例,它模拟了 jQuery 的 $.ajax 函数:
{
setUp: function () {
sinon.spy(jQuery, "ajax");
},
tearDown: function () {
jQuery.ajax.restore(); // Unwraps the spy
},
"test should inspect jQuery.getJSON's usage of jQuery.ajax": function () {
jQuery.getJSON("/some/resource");
assert(jQuery.ajax.calledOnce);
assertEquals("/some/resource", jQuery.ajax.getCall(0).args[0].url);
assertEquals("json", jQuery.ajax.getCall(0).args[0].dataType);
}
}
看一下主干-人造服务器。它将允许您处理(和“伪造”响应)每个模型(或集合)的任何同步操作(获取、保存等)。
Sinon.js 是一个很好的候选者,虽然如果你想模拟多个响应,设置标题、处理写入逻辑等可能会成为很多工作。
FakeRest 在 Sinon.js的基础上更进一步,模拟了一个基于 JSON 对象的完整 REST API - 所有客户端。
我的代码是这样的
// config
const TEST_JSON = require('./test.json')
const API_MAP = {
testA: 'someroot'
}
const FAKE_API_MAP = {
testA: TEST_JSON
}
// here's model
let BaseModel = Backbone.Model.extend({
url: function() {
return `${HOST}${API_MAP[this.resourceName]}/`
}
})
let FakeModel = Backbone.Model.extend({
fetch: function(options) {
return this.sync('', this, _.extend({}, options));
},
sync: function(method, model, options) {
this.set(FAKE_API_MAP[this.resourceName], this.options)
this.trigger('sync', this);
},
});
// now it's easy for switch them
let modelA = new BaseModel({
resourceName: 'testA'
})
modelA.fetch()
let fakeModelA = new FakeModel({
resourceName: 'testA'
})
fakeModelA.fetch()