如何对 AngularJS $promise.then 进行单元测试
Posted
技术标签:
【中文标题】如何对 AngularJS $promise.then 进行单元测试【英文标题】:How to unit test AngularJS $promise.then 【发布时间】:2014-04-06 21:20:15 【问题描述】:我有一个使用 Angular 资源进行 API 调用的工厂。然后我创建了一个名为 getAllResources 的函数,并使用工厂来查询我的所有数据。然后在我的控制器中,我使用该服务和 $promise.then 来获取我的数据并将其存储在一个变量中。
这是在咖啡脚本中。如何对此进行单元测试:
工厂:
resource "/perm/api/account/:uid/svcs",
uid: "@uid"
,
query:
cache: true
isArray: true
method: "GET"
服务:
getAllResources: (uid) ->
factory.query(uid: uid)
Ctrl:
model.getAllResources(scope.accountID).$promise.then ((response) ->
scope.allResources = response
resPromise.resolve()
), (error) ->
log.debug error
state.go "pageunavailable"
我正在尝试通过以下方式对此进行测试:
在每个之前:
var def, model, service;
service = $injector.get("Service");
model =
getAllResources: function()
def = q.defer();
return def.promise;
;
controller("Ctrl",
$scope: scope,
model: model
, service);
它():
fakeProfSvcsData = [id:0,name:"zeon",id:1,name:"leo"];
spyOn(model, "getAllResources").andCallThrough();
def.resolve(fakeProfSvcsData);
scope.$digest()
expect(scope.allResources).toEqual(fakeProfSvcsData);
【问题讨论】:
【参考方案1】:我通过修改以下代码修复了它:
服务:
getAllResources: (uid) ->
factory.query(uid: uid).$promise
Ctrl:
model.getAllResources(scope.accountID).then ((response) ->
scope.allResources = response
resPromise.resolve()
), (error) ->
log.debug error
state.go "pageunavailable"
它():
fakeProfSvcsData = [id:0,name:"zeon",id:1,name:"leo"];
spyOn(model, "getAllResources").andReturn(def.resolve(mockProfSvcsData));
def.resolve(fakeProfSvcsData);
scope.$digest()
expect(scope.allResources).toEqual(fakeProfSvcsData);
【讨论】:
以上是关于如何对 AngularJS $promise.then 进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AngularJS2“final”中对组件进行单元测试?