我有一个控制器需要运行几个与客户端上的数据交互的异步方法,并且不会调用服务器。我有一种方法在浏览器中正常工作,但我想用测试驱动方法,我不能让它在测试环境(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中。
但是当我去运行测试时,sc.schedule仍然是一个空数组,所以测试失败了。如何在测试中解析Resource.query()?
答案 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);
});