【发布时间】:2014-06-04 12:00:32
【问题描述】:
我正在使用 $q 服务进行异步调用。我无法使用 karma 在单元测试中解析“then”和“defer”。
以下是我的控制器代码。
scope.filterUrls = [{url:'page1'}, {url: 'page2'}, {url:'page-error'}];
scope.bindFilters = function () {
angular.forEach(scope.filterUrls, function (data) {
scope.getFilterData(data.url, '').then(function (result) {
if (data.url === 'page1') {
scope.moduleData.index = result.data;
} else if (data.url === 'page2') {
scope.moduleData.page2 = result.data;
}
});
});
}
scope.getFilterData = function (filterUrls, params) {
// $q service object
var deferred = q.defer();
// regular ajax request
http({
method: 'GET',
url: app.api.root + filterUrls,
params: params
})
.success(function (result) {
// promise resolve
deferred.resolve(result);
})
.error(function (result) {
// called asynchronously if an error occurs
// or server returns response with an error status.
deferred.reject('Erreur request : ' + result);
});
return deferred.promise;
};
测试规范:
it('should call getFilterData() in bindFilters()', function () {
spyOn(scope, 'getFilterData');
scope.bindFilters();
expect(scope.getFilterData).toHaveBeenCalled();
});
我收到一个名为“TypeError: Cannot read property 'then' of undefined”的错误。
如何使用业力为这两种方法编写单元测试。
更新:
1.如何测试scope.getFilterData()的成功和错误
2 .then 函数在 scope.bindFilters() 函数中。
请帮忙..
【问题讨论】:
标签: angularjs unit-testing karma-runner q