如果您将资源与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等垃圾以使我的测试干净?
答案 0 :(得分:1)
查看资源文档here
的“退货”部分寻找toJson函数,它可以帮助你,因为它为你剥去角度字段
一种更简单的方法是,当你获得一个角度资源对象时,你可以只分配scope.items,无论属性在包含数据的资源上是什么。 E.g:
$scope.items = resource.items;
这将为您通过测试,这是我在使用ngresource时通常所做的,因为这是我的视图控制器所使用的所有内容