バックボーン モデルで奇妙な動作が発生しています。呼び出してからサーバーが応答するまでの間に設定した属性save()
がスローされ、サーバーの応答に置き換えられます (保存された属性をエコーするだけです)。
これは Backbone の本来の動作ですか? サーバーが少し遅れると、アプリが非常に狂ったように見えcurrentScreen
ます。画面を後方に移動する古い属性で属性が上書きされます。これが私のコードです:
Interview = Backbone.Model.extend({
urlRoot: "/interviews",
defaults: {
"currentScreen": 0
}
});
そして、これが私が期待することを説明する私の Jasmine/Sinon.JS テストです (それは で失敗しますExpected 0 to equal 1.
):
describe("Interview model", function() {
beforeEach(function() {
this.interview = new Interview;
});
describe("saving with a slow server response", function() {
beforeEach(function() {
this.server = sinon.fakeServer.create();
});
afterEach(function() {
this.server.restore();
});
it('should not overwrite locally changed attributes on server response', function() {
this.server.respondWith("PUT", "/interviews/1",
[200, { "Content-Type": "application/json" },
'{"id":1,"currentScreen":0}']);
this.interview.set({id: 1, currentScreen: 0});
this.interview.save();
this.interview.set({currentScreen: 1}); // user navigates to next screen
this.server.respond(); // return fake response after currentScreen changed locally
expect(this.interview.get('currentScreen')).toEqual(1);
});
});
});