1

我有一个控制器,它需要运行几个异步方法,这些方法与客户端上的数据进行交互并且不调用服务器。我有一种方法在浏览器中运行良好,但我想通过测试来驱动这些方法,但我无法让它在测试环境(Karma 和 Mocha)中运行。原因是 $resource.query() 返回的空数组永远不会在测试环境中填充,因为承诺没有得到解决。这是我在测试套件中的 beforeEach 。

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

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

在此处输入图像描述

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

4

1 回答 1

0

Resource.query() 与 Promises 一起工作,这是一个异步过程。

碰巧您的测试在异步请求完成之前和数组填充之前执行。

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

或者,您可以在测试中检索从 Resource.query().$promisse 返回的 $promisse,并在其实现中执行预期。

前任:

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

sc.promisse(function(values) {
  expect(values.length).not.toBe(0);
});
于 2015-01-07T16:01:07.800 回答