我在Ember View中有以下代码:
postRender: ->
@_super()
@$().tooltipster({
content: @$().data('tooltip')
contentAsHTML: true
})
我正在尝试测试tooltipster()
在postRender()
执行时被调用但我在使用Sinon监视tooltipster()
时遇到了一些问题。这是我到目前为止的规格:
describe 'postRender', ->
it 'initializes tooltips', ->
spy = sinon.spy(view.$(), 'tooltipster')
view.postRender()
spy.should.be.calledOnce
view.$().tooltipster.restore()
但是抱怨view.$()
未定义。
关于如何使这项工作的任何想法?
谢谢!
答案 0 :(得分:1)
我很确定你应该发送一个函数,而不是函数对sinon的间谍的反应。
spy = sinon.spy(view.$, 'tooltipster')
话虽如此,但不太可能在视图上定义$
方法,而不遵循正确的约定。而且您并没有真正测试Ember设置$方法的能力,因此如果需要,您可以自行设置。像这样:
var test = false;
view.$ = function(){
return {
data: function(attr){
return 'something';
},
tooltipster: function(hash){
test = true;
}
};
}
view.postRender();
assert(test, 'tooltipster should have been called, and test is true');
答案 1 :(得分:0)
jQuery对象从$().css()
对象获取$.fn
之类的方法。 jQuery plugins like tooltipster are registered there, too。监视$.fn.tooltipster
是你想要做的:
spy = sinon.spy view.$.fn, 'tooltipster'
view.postRender()
spy.should.be.calledOnce
spy.restore() # or view.$.fn.tooltipster.restore()