2012-06-25 44 views
6

Làm cách nào tôi có thể giả mạo phản hồi REST trong mô hình của mình s.t. nó không thực sự đi đến dịch vụ nhưng trả về một json cố định?phản hồi mô hình giả trong backbone.js

Nếu có thể chỉ cho tôi phiên bản thực hiện với đồng bộ ghi đè() và phiên bản ghi đè tìm nạp(). Tôi đã thất bại với cả hai vì vậy đây sẽ là một nền giáo dục tốt cho sự khác biệt giữa chúng.

+1

Tôi không nghĩ rằng bạn có thể thay đổi trừ khi bạn đồng bộ() trong nguồn Backbone –

+0

các dịch vụ còn lại là chưa sẵn sàng. Tôi không muốn sử dụng bất kỳ dịch vụ giả hoặc thứ gì đó bên ngoài mã của tôi. Tôi muốn ghi đè lên phương pháp xương sống gọi ajax (không ghi đè chính ajax) và thay vào đó cung cấp một phản hồi cố định –

Trả lời

9
Backbone.Model.extend({ 
    fetch: function(){ 
    var model = this; 
    model.set({yourStatic: "Json Here"}); 
    } 
} 

này nên làm việc. Từ các tài liệu Backbone:

fetch(): reset trạng thái của mô hình từ máy chủ bằng cách ủy quyền để Backbone.sync

2

Nếu câu hỏi của bạn liên quan đến đơn vị kiểm tra mã của bạn mà không cần API trực tiếp, hãy xem Sinon.JS. Nó giúp chế nhạo toàn bộ các phản hồi của máy chủ API cho mục đích thử nghiệm.

Dưới đây là một ví dụ từ các tài liệu Sinon mà chế giễu chức năng $ .ajax của jQuery:

{ 
    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); 
    } 
} 
+0

cảm ơn, câu hỏi của tôi không phải là liên quan nhưng nhiều hơn cho tôi để có được giáo dục và thử một số công cụ –

2

Hãy xem backbone-faux-server. Nó sẽ cho phép bạn xử lý (và 'giả mạo' một phản ứng cho) bất kỳ op2 đồng bộ hóa (tìm nạp, lưu, vv) cho mỗi Mô hình (hoặc Bộ sưu tập).

0

Sinon.js là một ứng cử viên tốt, mặc dù nếu bạn muốn mô phỏng nhiều hơn một vài phản ứng, nó có thể trở thành rất nhiều công việc để tiêu đề cài đặt, xử lý ghi logic, vv

Xây dựng trên Sinon. js, FakeRest tiến thêm một bước và mô phỏng một API REST hoàn chỉnh dựa trên một đối tượng JSON - tất cả phía máy khách.

0

Mã của tôi như thế

// 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() 
Các vấn đề liên quan