茉莉测试私有回调函数
Jasmine test private callback function
我知道在unitTests中直接调用私有函数不是一个好的做法,我们必须通过公共方法测试私有代码。
我的情况是,我不知道该怎么做才能达到我想要的。我想知道一个回调函数是否从我的interval中被调用。这是在angular控制器中实现的。
function prepareInterval() {
self.callbacksData = [];
if(self.DynamicValuesList !== null) {
self.myPromise = $interval(callbackFunction, userInputInterval * 1000);
}
}
和我的回调函数只显示来自callbackFunction的数据。我想对callbackFunction是否被调用进行unitTest,但是我不能。
我试过https://makandracards.com/makandra/32477-testing-settimeout-and-setinterval-with-jasmine
it('myUnitTest', function(){
//Prepare data
var controller = createController();
spyOn(controller, 'callbackFunction');
expect(controller.callbackFunction).not.toHaveBeenCalled();
});
我得到的错误是。
编辑:顺便说一下,我在beforeEach函数callbackFunction()不存在
在这里我会采取稍微不同的方法。
显然你不希望callbackFunction
本身暴露,所以不要。保密。
但是,您可以将其作为值返回给self
实例。
self.myPromise = $interval(callbackFunction, userInputInterval * 1000);
所以cán测试的是self.myPromise
值。如果该值包含间隔,则间隔已经设置,因此可以非常确定您的方法已被调用。
我希望self
对象是控制器,所以您可以像这样测试self.myPromise
的值:
it('myUnitTest', function(){
//Prepare data
var controller = createController();
expect(controller.myPromise).toBe( /* undefined? */);
});
只是测试间隔值> 0:
您可以尝试重构以获得可测试性。我不确定stringmatcher是否适用于数字,现在我自己没有时间进行测试:)
function prepareInterval() {
self.callbacksData = [];
if(self.DynamicValuesList !== null) {
self.myPromise = $interval;
self.myPromise(callbackFunction, userInputInterval * 1000);
}
}
it('myUnitTest', function(){
//Prepare data
var controller = createController();
spyOn(controller, 'myPromise');
expect(controller.myPromise).toHaveBeenCalledWith(jasmine.any(Function), jasmine.stringMatching(/^[1-9][0-9]*$/));
});
相关文章:
- JavaScript回调函数
- 如何在回调函数中执行流
- 回调函数中传递参数的困难(Google Map API Markers)
- 如何正确地将参数传递给RequireJS回调函数
- 回调函数在python代码中离线
- 从AJAX回调函数中分离数据
- 赋值后的回调函数
- 如何在javascript回调函数中返回多个变量
- 函数表达式,返回回调函数
- 等待回调函数执行
- JavaScript回调函数和Google Feed API
- 如何从ajax成功回调函数中读取javascript变量
- 正在保存JavaScript内部回调函数中的值
- 有没有什么方法可以停止Jquery中的animate(也可以停止完整的回调函数)
- 如何在javascript中添加带有回调函数的按钮点击事件作为window.conf
- 在Golang回调函数中启用CORS
- 在初始函数完成之前调用回调函数
- jQuery Mobile:如何在$.Mobile.changePage之前运行回调函数
- 即使使用回调函数也无法返回值
- 为什么prototypjs观察到回调函数有绑定