当我做App.reset时,为什么我的reopenClass状态不会重置?

时间:2013-07-11 03:37:27

标签: ember.js ember-testing

我有一个简单的模型类,我用

存储一些全局状态
  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;
      }
  });

当我使用RC6和ember-testing调用App.reset()时,我注意到全局people数组中的状态在测试之间保持不变。我确实看到一个日志,显示在测试之间调用拆解,它只是不清除#人。如何在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 ...
      }   
  });

更新

如果你想在RC6中模拟“/”路径,一个bug会阻止你的模型钩子在你模拟xhr之后再次触发(我希望看到这个在RC7 +中修复)

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

1 个答案:

答案 0 :(得分:2)

App.reset只会摧毁Ember生成的物体。课程没有改变。

您需要扩展重置方法并手动进行清理。

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