我有一个控制器调用一个服务,它是一个资源的包装。像这样:测试控制器,取决于基于资源的服务
app.factory("Service", ["$resource", function ($resource) {
return $resource("/api/Service/get");
}]);
服务方法的返回值被分配给控制器内的变量。通常,该变量的类型为Resource
,它包含promise
。当promise被解析时,变量将被填充所有从后端返回的值。 我跟踪承诺上的,然后,以便修改从后端接收到的模型。像这样:
this.model = Service.get();
this.model.$promise.then(function(data) {
// do something with data
});
我需要测试我控制器的结果模型变量的值。 我发现要做到这一点的唯一方法,就是使用$ httpBackend以真正实现我的服务。然而,这是丑陋的,因为然后,测试我的控制器,我必须通过请求路径"api/Service/get"
到httpBackend.when()为了使它以某种价值回应。
摘录形成我的测试:
// call Controller
$httpBackend.when('GET', '/api/Service/get').respond(someData);
$httpBackend.flush();
expect(scope.model.property).toBe(null);
这似乎和感觉完全错误的。使用单独的服务来处理资源的关键在于控制器不知道url和http方法名称。所以我该怎么做?
换句话说,我想测试的是then
被调用,并做我需要做的事情。
我想我可以创建一个单独的服务,在then
中调用,做我需要做的模型,但它感觉有点矫枉过正,如果我想要做的是例如将一个字段设置为null取决于一个简单的条件。
这篇对你的工作? – tasseKATT