arn*_*old 17 unit-testing jasmine angularjs
我正在使用茉莉花为角应用编写测试用例.但是许多内部方法在服务中被声明为私有.
例:
App.service('productDisplay', function(){
var myPrivate = function(){
//do sth
}
this.doOfferCal = function(product, date){
//call myPrivate
//do sth too
return offer;
}
});
Run Code Online (Sandbox Code Playgroud)
使用jasmine可以直接编写"doOfferCal"的代码测试,但我也想为myPrivate编写单元测试.
我该怎么做?
提前致谢.
小智 14
谢谢jabko87。
此外,如果您想传递参数,请使用以下示例:
const myPrivateSpy = spyOn<any>(service, 'transformNative').and.callThrough();
myPrivateSpy.call(service, {name: 'PR'});
Run Code Online (Sandbox Code Playgroud)
注意:这里 service 是 Class,transformNative 是私有方法,{name: 'PR'} 传递一个对象参数
ach*_*han 10
您是否有特定原因要测试您的私人方法?
通过测试doOfferCal()
,你隐含地测试了myPrivate()
做正确的事情.
虽然这是针对RailsConf的,但Sandi Metz在应该测试什么方面有很好的讨论.
Achan 100%正确,但如果你真的需要在测试中调用私有方法(应该永远不会:-))你可以通过以下方式完成:
var myPrivateSpy = spyOn(productDisplayService, "myPrivate").and.callThrough();
myPrivateSpy.call();
Run Code Online (Sandbox Code Playgroud)
如果你想调用你的私有方法,你只需这样做:
component["thePrivateMethodName"](parameters);
Run Code Online (Sandbox Code Playgroud)
component
您的服务类别或组件类别在哪里。
为了测试内部函数,我调用外部函数来调用内部函数,然后根据内部函数的需要改变我的输入。因此,在您的情况下,您将productDisplay
根据myPrivate
需要调用并改变您的输入,然后验证您是否具有预期的输出。您还可以使用或myPrivate
来监视和测试事物。.havebeencalledwith
.andcallthrough