使用emberjs测试视图控制器

时间:2012-07-24 21:25:54

标签: javascript ember.js jasmine jasmine-jquery

我有一个BuildingBlocks视图,其中包含如下模板:

{{#each controller}}
  {{view App.BuildingBlockView contentBinding="this"}}
{{/each}}

我正在尝试使用控制器测试此视图在每个帖子上循环 我正在使用Jasmine。

我已经创建了这样的视图

App.buildingBlocksView = App.BuildingBlocksView.create()
Em.run ->
  App.buildingBlocksView.append()

我想用3个BuildingBlocks为这个视图填充控制器,所以我可以测试这个视图包含3个元素。

请有人能告诉我怎么做吗?

到目前为止我这样做但是没有用。

App.buildingBlocksController = App.BuildingBlocksController.create()
App.buildingBlocksView.set("controller", App.buildingBlocksController.content)
App.buildingBlocksView.controller.pushObject(App.BuildingBlock.createRecord(), App.BuildingBlock.createRecord(), App.BuildingBlock.createRecord())
expect(App.buildingBlocksView.$('.building-block').length).toEqual(3)

但是我收到错误无法调用未定义的方法'pushObject'

请帮忙 瑞克

1 个答案:

答案 0 :(得分:1)

看起来你走在正确的轨道上 - 使用茉莉花的道具。

首先,我没有在你的问题中看到定义,所以请仔细检查App.BuildingBlocksController是否是Ember.ArrayController的子类

假设情况如此,您将在创建实例时设置初始内容数组。然后将视图的controller属性设置为控制器实例,并像以前一样推送对象。

App.buildingBlocksController = App.BuildingBlocksController.create({ content: [] })
App.buildingBlocksView.set("controller", App.buildingBlocksController)    
App.buildingBlocksView.controller.pushObject(App.BuildingBlock.createRecord(), App.BuildingBlock.createRecord(), App.BuildingBlock.createRecord())

这应该解决你使用pushObject时遇到的问题。我怀疑你需要在Ember.run()循环中移动上面的内容,否则期望会失败,因为Ember不会更新DOM。