如何获得$ resource以在测试环境中解析其承诺

时间:2014-12-16 18:43:26

标签: angular-resource httpbackend

我有一个控制器需要运行几个与客户端上的数据交互的异步方法,并且不会调用服务器。我有一种方法在浏览器中正常工作,但我想用测试驱动方法,我不能让它在测试环境(Karma和Mocha)中工作。原因是$ resource.query()返回的空数组永远不会在测试环境中填充,因为promise无法解析。这是我在测试套件中的beforeEach。

    beforeEach(inject(function($rootScope, $controller, scheduleService){
    scope = $rootScope.$new();
    sc = $controller('scheduleCtrl', {
        $scope: scope, service: scheduleService
    });
    scope.$apply();
    }));

scheduleCtrl有一个属性计划,该计划在其构造函数中分配给Resource.query()的结果。我可以看到三个返回的对象加载到MockHttpExpectation中。

enter image description here

但是当我去运行测试时,sc.schedule仍然是一个空数组,所以测试失败了。如何在测试中解析Resource.query()?

1 个答案:

答案 0 :(得分:0)

Resource.query()使用promisses,这是一个assync进程。

在完成同步请求之前和填充数组之前,您的测试会执行。

您可以使用$ httpBackend,这样您就可以在$ httpBackend.flush()之后调用expect。

或者你可以在你的测试中检索从Resource.query()。$ promisse返回的$ promisse,并在其实现中做出期望。

例如:

$scope.promisse = Resource.query().$promisse;

sc.promisse(function(values) {
  expect(values.length).not.toBe(0);
});