摆脱带有$ promise的angular $ resource添加的字段

时间:2016-11-19 09:40:06

标签: javascript angularjs

如果您将资源与promise一起使用:

$resource('api/items').get(items).$promise.then((items) => {
    $scope.items = items
}

原来它在items对象中包裹Result并添加了一些额外的字段。这不会影响应用程序本身,但会破坏测试:

httpBackend.expectGET('api/items').respond(200, items);
controller.getItems();
httpBackend.flush();
expect(controller.items).toEqual(items);

导致错误:

Expected [ Resource({ items: [...], $promise: Promise({ $$state: Object({ status: 1, pending: undefined, value: <circular reference: Object>, processScheduled: false }) }), $resolved: true }) ] to equal [ Object({ items: [...] }) ].

为什么angular会添加这些字段,如何摆脱这个$ promise,$ resolved等垃圾以使我的测试干净?

1 个答案:

答案 0 :(得分:1)

查看资源文档here

的“退货”部分

寻找toJson函数,它可以帮助你,因为它为你剥去角度字段

一种更简单的方法是,当你获得一个角度资源对象时,你可以只分配scope.items,无论属性在包含数据的资源上是什么。 E.g:

$scope.items = resource.items;

这将为您通过测试,这是我在使用ngresource时通常所做的,因为这是我的视图控制器所使用的所有内容