我正在使用茉莉花为角应用编写测试用例。但是许多内部方法在服务中被声明为私有。
示例:
App.service('productDisplay', function(){
var myPrivate = function(){
//do sth
}
this.doOfferCal = function(product, date){
//call myPrivate
//do sth too
return offer;
}
});
使用jasmine可以直接编写“doOfferCal”的代码测试,但我也想为myPrivate编写单元测试。
我该怎么做?
提前致谢。
答案 0 :(得分:9)
您是否有特定原因要测试私人方法?
通过测试doOfferCal()
,您隐式测试myPrivate()
正在做正确的事情。
虽然这是针对RailsConf的,但是Sandi Metz在what should be tested上有很好的谈话。
答案 1 :(得分:5)
Achan是100%正确的,但是如果你真的需要在你的测试中调用私有方法(应该永远不会:-))你可以通过以下方式来实现:
var myPrivateSpy = spyOn(productDisplayService, "myPrivate").and.callThrough();
myPrivateSpy.call();
答案 2 :(得分:2)
为了测试内部函数,我调用调用内部函数的外部函数,然后根据内部函数的要求改变输入。因此,在您的情况下,您可以调用productDisplay
并根据myPrivate
需要更改输入,然后验证您是否具有预期输出。你也可以窥探myPrivate
,并使用.havebeencalledwith
或.andcallthrough
对此进行测试。
答案 3 :(得分:2)
感谢jabko87。
此外,如果要传递参数,请使用以下示例:
const myPrivateSpy = spyOn<any>(service, 'transformNative').and.callThrough();
myPrivateSpy.call(service, {name: 'PR'});
注意:这里的服务是类,transformNative是私有方法,{name:'PR'}传递对象参数
答案 4 :(得分:0)
如果要调用私有方法,则只需要这样做:
component["thePrivateMethodName"](parameters);
component
是您的服务类或组件类。