我正在尝试通过阅读源和单元测试各种组件来了解更多关于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'。
答案 0 :(得分:1)
这是由这一行引起的:
set(controller, 'view', view);
必须是:
set(view, 'controller', controller);
摘要:该视图必须了解其控制器。在您的情况下,视图没有查找属性的上下文,因此不起作用。你不小心碰到了它。
注意:这适用于Ember-pre4。我成功地对它进行了测试。 (我相信最近查看设置的方法已经改变了)