Sinon Ember视图测试,无法访问控制器

时间:2014-07-11 19:17:24

标签: unit-testing view ember.js sinon

我正在尝试在视图中测试此代码:

attributeBindings: ['style'] #tested ok

style: (->
    if @get('controller.isFilterApplied')
      'display: block;'
    else
      'display: none;'
  ).property('controller.isFilterApplied')

在使用sinon和qunit的测试文件中,对attributeBindings的测试工作得很好,所以我假设文件的连接是建立的:

test 'attributeBindings', ->
  deepEqual @view.get('attributeBindings'),
    ['style'],
    'attributeBindings match'

接下来,我尝试按上述方法测试style函数,

我在我的测试文件中尝试了this.view.get('controller'),但即使我在测试文件中添加了所有控制器,它仍返回null

needs: [
    #all controllers related are added here
  ]

我尝试了一种不太好的方法:

test 'style -isFilterApplied false', ->
  originalGet = @view.get
  getStub = sinon.stub(@view, 'get')
  getStub.withArgs('controller.isFilterApplied').returns(false)
  @view.get = originalGet
  equal @view.get('style'), 'display: none;', 'style on true'

但返回false属性不起作用,@get 'controller.isFilterApplied'在调试时返回null。

那么,我怎么能手动将视图的控制器设置到应该链接到我的测试文件中的控制器呢?或者我应该如何改变sinon

1 个答案:

答案 0 :(得分:0)

moduleFor 'view:viewName', 'viewName',
  setup: ->
    @view.set 'controller', App.__container__.lookup('controller:theControllerINeed')

我将此添加到setup函数,然后立即定义this.view.controller。