2011-01-05 101 views
0

我试图看如果私人功能已被调用。最后我会去寻找变量的设置。Javascript单元测试茉莉花/单元测试 - 我如何测试一个私有函数是否被调用?

我的JavaScript看起来像一个函数和私有函数

mysamplefunction = function(item){ 

    /* figure out bla */  
    _myprivatefunction(item,bla) 

} 

_myprivatefunction = function(item, bla){ 


    /* do lots of exciting private things with item and bla */ 
} 

茉莉花似乎期待下面的语法..

spyOn(mysamplefunction ,'_myprivatefunction'); 

然而,由于我们的arent严格处理的实例,按照下mysamplefunction和_myprivatefunction不是一个方法(它只是另一个类)我不知道如何得到这个工作?有任何想法吗 ??

+0

呃,当然,一个provate函数根据定义是一个实现细节,而不是你应该测试的东西。 – annakata 2011-01-05 13:04:45

+0

@annakata在现实世界中,它确实应该是私人的,但是我需要测试它以确保它确实可行。如果我在java中,我会用反射来改变方法的可访问性,然后我可以高兴地运行它们 - 这种类型的方法在JavaScript中似乎不可行。 – wmitchell 2011-01-05 15:02:04

回答

1

如果你描述它的函数声明,我期望:

spyOn(window, '_myprivatefunction'); 

工作。

如果函数是一个封闭件内,那么window将不得不变得像

TopLvlHeir.2ndlvel.samplefunctionpkg.publicTesting 

唯一的要求是,它是含有一个_myprivatefunction属性的对象,例如firstArg[secondArg]是一个功能。

+0

我希望能够spyon /检查_myprivatefunction被称为不实际专门调用它的事实。 – wmitchell 2011-01-05 12:48:42

+0

@wmitchell,我知道。我的答案仍然存在 - 它根本不会调用函数。但是由于你已经在全局范围声明了'_myprivatefunction'(并被这样调用),它所属的对象是'window'。因此,我的代码正在窥探'window'对象的''_myprivatefunction''属性。 – 2011-01-05 12:51:03

+0

我有很多闭包,所以_myprivatefunction从窗口隐藏,但我已经将它添加到公共界面。沿着TopLvlHeir.2ndlvel.samplefunctionpkg.publicTesting_myprivatefunction的一些方法试图找出你的例子中窗口的含义。 – wmitchell 2011-01-05 14:44:33