为什么即使在测试之间,这个控制器似乎“保持状态”?

时间:2014-01-27 03:05:50

标签: ember.js

我正在编写一个简单的qunit测试,它有一个控制器设置,带有一个数组中的几个项目

App.UploadController = Ember.Controller.extend({
  to_upload: Ember.A([])
});

我向这个“to_upload”数组添加内容并在测试之间进行验证。一个问题我发现,如果我在我的测试“拆卸”中没有像这样“手动清除它”,它会保持这种状态(即使在每次拆解时调用App.reset()(调用destroy)

App.__container__.lookup("controller:upload").clear_files()

(清除文件是我在测试助手中添加的一个简单的猴子补丁 - 不是生产代码)

App.UploadController.reopen
  clear_files: function() {
    this.get('to_upload').clear();
  }

这是我对qunit测试的推断

module "/upload",
  teardown: function() {
    App.reset()
    App.__container__.lookup("controller:upload").clear_files()
  }

1 个答案:

答案 0 :(得分:1)

这可能与以下事实有关:将数组赋值给类定义中的属性使其成为类属性而不是实例属性。我不确定这是否记录在某处,但我已经读过几次了。如果我能找到它,我会用文档更新。

在此之前,您可以通过修改代码来证明我的理论。

App.UploadController = Ember.Controller.extend({
  init: function(){
    this.set('to_upload', Em.A([]));
    this._super();
  },
  to_upload: null
});

您可以在步骤6中阅读http://codebrief.com/2012/03/eight-ember-dot-js-gotchas-with-workarounds/

我很确定这应该放在文档的某个地方,但我不确定最明显的地方。