TypeError: 无法阅读该物业 'then' 不确定的测试 angularjs-grunt

我使用该服务 $q 执行异步调用。 我无法解决 'then' 和 'defer' 在模块化测试中使用 karma.

以下是我的控制器代码。


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: 无法阅读该物业 'then' undefined".

如何使用Karma为这两种方法编写模块化测试?

更新:

1.how 我们可以检查成功和错误吗? scope.getFilterData//

2 功能 .then 在功能中 scope.bindFilters//.

请帮忙..
已邀请:

詹大官人

赞同来自:

如果你需要

只要

发现,

谎言
getFilterData

或不

, 尝试返回假承诺,假函数:

从 jasmine 1.3 我们可以使用
andCallFake

:


it/'should call getFilterData// in bindFilters//', function // {
spyOn/scope, 'getFilterData'/.andCallFake/function//{//replace with a fake function
var deferred = $q.defer//; //assume that you already inject $q service in beforeEach and save it as a variable.
return deferred.promise; //returns a fake promise
}/;
scope.bindFilters//;
expect/scope.getFilterData/.toHaveBeenCalled//;
}/;


从 jasmine 2.0 我们可以使用
and.callFake

而不是这个。

另一个决定是使用
andReturnValue


$q.when//

:


it/'should call getFilterData// in bindFilters//', function // {
spyOn/scope, 'getFilterData'/.andReturnValue/$q.when///;
scope.bindFilters//;
expect/scope.getFilterData/.toHaveBeenCalled//;
}/;


从 jasmine 2.0 我们可以使用
and.returnValue

而不是这个。

要回复问题请先登录注册