2013-07-11 3 views
2

У меня есть простой класс модели, что я хранить некоторое глобальное состояние сПочему мой статус reopenClass не перезагружается, когда я делаю App.reset?

App.Person = Ember.Object.extend({ 
     firstName: '', 
     lastName: '' 
    }); 

    App.Person.reopenClass({ 
     people: [], 
     add: function(hash) { 
      var person = App.Person.create(hash); 
      this.people.pushObject(person); 
     }, 
     remove: function(person) { 
      this.people.removeObject(person); 
     }, 
     find: function() { 
      var self = this; 
      $.getJSON('/api/people', function(response) { 
       response.forEach(function(hash) { 
        var person = App.Person.create(hash); 
        Ember.run(self.people, self.people.pushObject, person); 
       }); 
      }, this); 
      return this.people; 
     } 
    }); 

Когда я призываю App.reset() с помощью RC6 и уголек-тестирования я заметил то, что государство в глобальных людей массив скопиться вокруг между тестами. Я вижу журнал, который показывает, что teardown вызывается между тестами, он просто не очищает число людей. Как я могу сбросить это при прерывании QUnit?

module('integration tests', {             
     setup: function() { 
      Ember.testing = true; 
      this.server = sinon.fakeServer.create(); 
      this.server.autoRespond = true; 
      Ember.run(App, App.advanceReadiness); 
     }, 
     teardown: function() { 
      this.server.restore(); 
      App.reset(); //won't kill that global state ... 
     } 
    }); 

Update

Если вы хотите, чтобы дразнить «/» маршрут в RC6 ошибка, будет препятствовать вашей модели крюк от снова стрелять после того, как вы дразнить XHR (я надеюсь увидеть это зафиксировано в RC7 +)

https://github.com/emberjs/ember.js/issues/2997

ответ

2

App.reset только разрушает Ember, порожденных объектов. Занятия нетронуты.

Вам необходимо продлить метод сброса и выполнить эту очистку вручную.

App = Ember.Application.create({ 
    reset: function() { 
    this._super(); 
    App.Person.people = []; 
    } 
}); 
+0

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

+0

Определение App.reset выглядит как обычный метод. '_super' должен работать с этим. Но это делает вещи на runloop, который отложен. Следовательно, это работает в конечном итоге. Если возможно, вы можете выполнить пользовательский сброс до и затем вызвать _super. –

+0

Просто быстрое обновление для тех, кто может следовать - это не работает с Ember 1.3.2 (кажется, что вызов супер внутри этого больше не поддерживается) –