美好的一天!
我想测试是否调用了parseUrl方法,但结果是:test失败 - 从未调用parseUrl,尽管如果我将parseUrl()放在$ interval服务函数之外,那么测试通过成功。
这是调用parseUrl的地方:
select i.name,i.rooms , group_concat(jsonres separator ',') from Info_Table i right join ( select r.r_id, CONCAT('[{"NoOfAdults":"', Adult,'","NoOfChild":"', Child,'","ChildAge":[',group_concat(C.Age separator ','),']"}') jsonres from test.RoomGuests_Table r left join test.ChildAge_Table c on r.ID=c.R_ID group by c.R_ID) as r on i.id= r.r_id group by i.name,i.rooms;
以下是测试用例:
testMethod() {
let intervalPromise = this._$interval(() => {
this.parseUrl('test', 'test_code_name');
}, 500);
}
parseUrl(url, name) {}
事实上,如果我将testMethod()放在$ interval服务之外,那么测试成功通过。
答案 0 :(得分:1)
在测试中,您需要注入$interval
服务(可以使用ngMock)并致电$interval.flush(500);
var $interval;
angular.mock.inject(function (myModuleService, _$interval_) {
// Initialize the service under test instance
$interval = _$interval_;
});
it('Expect testMethod to be called', function () {
TestService.testMethod()
spyOn(TestService, 'parseUrl').and.callThrough();
$interval.flush(500);
expect(TestService.parseUrl).toHaveBeenCalled();
});
以下是文档的链接:https://docs.angularjs.org/api/ngMock/service/$interval
使用$ interval.flush(millis)向前移动毫秒,并触发计划在该时间内运行的任何函数。