Метод разбора Backbone.js - PullRequest
       32

Метод разбора Backbone.js

3 голосов
/ 28 января 2012

Я пытаюсь выполнить модульное тестирование моего первого приложения backbone.js, используя sinon.js и jasmine.js .

В этом конкретном тестовом примере я использовал метод fakeServer sinon.js, чтобы возвратить фиктивный ответ со следующей структурой.

beforeEach( function(){
  this.fixtures = {
    Tasks:{
      valid:{
        "tasks":[
          {
            id: 4,
            name:'Need to complete tests',
            status: 0
          },
          {
            id: 2,
            name:'Need to complete tests',
            status: 1
          },
          {
            id: 3,
            name:'Need to complete tests',
            status: 2,
          }
        ]
      }
     }
    };
  });

Поэтому, когда я на самом деле вызываю вызов fetch в приведенном ниже тестовом примере, он возвращает 3 модели правильно. В методе parse коллекции я попытался удалить корневой ключ 'tasks' и просто вернуть только массив объектов, что было упомянуто в документации к backbone.js. Но когда я делаю это, модели не добавляются в коллекцию, а collection.length возвращает 0.

   describe("it should make the correct request", function(){

    beforeEach( function(){
      this.server = sinon.fakeServer.create();
      this.tasks = new T.Tasks();
      this.server.respondWith('GET','/tasks', this.validResponse( this.fixtures.Tasks.valid) );
    });

    it("should add the models to the tasks collections", function(){
      this.tasks.fetch();
      this.server.respond();
      expect( this.tasks.length ).toEqual( this.fixtures.Tasks.valid.tasks.length );
    });

    afterEach(function() {
      this.server.restore();
    });

  });

Сборник задач

  T.Tasks = Backbone.Collection.extend({
    model: T.Task,
    url:"/tasks",
    parse: function( resp, xhr ){
      return resp["tasks"];
    }
  });

Подскажите, пожалуйста, что я здесь не так делаю?

1 Ответ

0 голосов
/ 31 января 2012

Проблема с моим кодом заключалась в методе проверки модели, а не в методе анализа коллекции.Я проверял атрибуты, даже если они не существуют.Объект, который отправляется для проверки, не будет каждый раз иметь все атрибуты.Например, в модели задачи с идентификатором, заголовком и статусом, где статус по умолчанию имеет значение 0, если я создам модель, подобную

var t = new Task({'title':'task title'});
t.save();

, метод validate получит только {'title': 'название задачи'} в качестве параметра для метода validate.

Поэтому важно также добавить эти условия в метод validate, и когда я добавил условия, чтобы проверить наличие определенного атрибута, а также когда он не равен нулю или не определен, мои тесты начали проходить.

...