1

我试图通过阅读源代码和单元测试各种组件来了解更多关于 ember 的核心。目前,我正在尝试连接一个简单的视图/控制器/模板组合,以查看是否可以针对使用给定模型和模板呈现的视图(实际 html 输出)进行断言。

我的第一个有效测试看起来像这样

it ("template will render given output", function(){
    var view = Ember.View.create({
        template: Ember.Handlebars.compile('bar')
    });
    Ember.run(function() {
        view.appendTo("#body");
    });
    expect(Ember.$.trim(view.$().text())).toEqual("bar");
  });

但这不是用模型或控制器做任何动态的事情。我的下一次尝试目前失败了,因为我似乎无法在视图中连接(连接到给定的控制器)。

  it ("model property is output when view bound", function(){
    var speaker = CodeCamp.Speaker.createRecord({id: 1, name: 'foobar'});
    var view = Ember.View.create({
        template: Ember.Handlebars.compile('{{#each foo in controller}}{{foo.name}}{{/each}}')
    });
    var controller = Ember.ArrayController.create({                                                                                    
        content: []
    });
    get(controller, 'content').push(speaker);
    var x = get(controller, 'content');
    var len = get(get(controller, 'content'), 'length');
    expect(len).toEqual(1);
    set(controller, 'view', view);
    Ember.run(function() {
        view.appendTo("#body");
    });
    expect(Ember.$.trim(view.$().text())).toEqual("foobar");
});

但就目前而言,断言失败了

预期 '' 等于 'foobar'。

4

1 回答 1

1

这是由这一行引起的:

set(controller, 'view', view);

它一定要是:

set(view, 'controller', controller);

摘要:视图必须知道它的控制器。在您的情况下,视图没有查找属性的上下文,因此不起作用。你不小心弄反了。

注意:这适用于 Ember-pre4。我成功地测试了这个修复程序。(我相信查看设置的方法最近发生了变化)

于 2013-02-14T14:11:17.367 回答