2012-06-25 13 views
6

¿Cómo puedo simular una respuesta REST en mi modelo a la vez? realmente no va al servicio pero devuelve un json fijo?respuesta de modelo falso en backbone.js

De ser posible, muéstreme una versión que lo haga con la anulación de sincronización() y una versión que anule la búsqueda(). Fallé con ambos, así que esta será una buena educación para la diferencia entre ellos.

+1

No creo que se puede cambiar a menos que el método de sincronización() en el origen Backbone –

+0

el resto servicio aún no está listo. No quiero usar ningún servicio simulado o algo externo a mi código. Quiero anular el método de la red troncal que llama ajax (no anular el ajax mismo) y en su lugar proporciono una respuesta fija –

Respuesta

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

Esto debería funcionar. De la documentación Backbone:

fetch(): Restablece el estado del modelo del servidor, delegando en Backbone.sync

2

Si su pregunta está relacionada con la unidad de prueba de su código sin la necesidad de una API en vivo, eche un vistazo a Sinon.JS. Ayuda a burlar respuestas enteras del servidor API para fines de prueba.

He aquí un ejemplo de los documentos Sinon que se burla de la función $ .ajax de 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

gracias, mi pregunta no está relacionada con ut pero más para mí obtener educación y probar algunas cosas –

2

Tome un vistazo a backbone-faux-server. Le permitirá manejar (y 'falsificar' una respuesta para) cualquier sync op (buscar, guardar, etc.) por Modelo (o Colección).

0

Sinon.js es un buen candidato, aunque si se desea simular más de unas pocas respuestas, se podría llegar a ser un montón de trabajo a las cabeceras de configuración, manejar la lógica de escritura, etc.

acumule en Sinon. js, FakeRest va un paso más allá y simula una API REST completa basada en un objeto JSON, todo en el lado del cliente.

0

Mi código como el que

// 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() 
Cuestiones relacionadas