2012-06-25 4 views
6

Как я могу подделать ответ REST в моей модели s.t. он действительно не подходит к службе, но возвращает фиксированный json?поддельный ответ модели в backbone.js

Если возможно, покажите мне версию, которая делает это с переопределяющей синхронизацией() и версией, которая переопределяет fetch(). Я потерпел неудачу с обоими, так что это будет хорошее образование, так как разница между ними.

+1

Я не думаю, что вы не можете, если вы измените синхронизации() метод в источнике Backbone –

+0

услуги остальное еще не готов. Я не хочу использовать какой-либо макет службы или что-то внешнее по отношению к моему коду. Я хочу переопределить метод магистрали, который вызывает ajax (не переопределяет сам ajax), а вместо этого обеспечивает фиксированный ответ –

ответ

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

Это должно работать. Из документации Backbone:

fetch(): Возврат значений состояния модели с сервера путем делегирования Backbone.sync

2

Если ваш вопрос связан с модулем, проверяющим ваш код без необходимости использования API в реальном времени, взгляните на Sinon.JS. Он помогает издеваться над всеми ответами сервера API для целей тестирования.

Вот пример из документации Синона что издевается функцию $ .ajax в 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

, спасибо, мой вопрос не связан, но больше для меня, чтобы получить образование и попробовать что-то –

2

Посмотрите на backbone-faux-server. Это позволит вам обрабатывать (и «подделывать» ответ на) any sync op (выборка, сохранение и т. Д.) за Модель (или коллекция).

0

Sinon.js является хорошим кандидатом, хотя, если вы хотите, чтобы имитировать более чем несколько ответов, это может стать много работы заголовков установки, обрабатывать логику записи и т.д.

Построение на Синоне. js, FakeRest идет дальше и имитирует полный REST API на основе объекта JSON - все клиентские.

0

Мой код, как этот

// 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() 
Смежные вопросы