在AngularJS中模拟服务以解耦REST调用的最佳方法

时间:2014-02-10 21:45:34

标签: angularjs

我正在使用AngularJS构建一个Web应用程序,并构建了一个AngularJS服务,我的控制器用它来创建,检索,更新和删除数据。我想将UI工作分配给另一个开发人员,但我不希望他们需要AngularJS服务所依赖的依赖项。我想构建一个模拟服务,只返回模拟数据,而不是调用实时REST服务。

我的应用程序设置如下:

var myApp = angular.module('myApp', ['ui.bootstrap']);

我的控制器目前使用以下方式连接到服务:

myApp.controller('TodoCtrl', function TodoCtrl($scope, $JSOMService) {
   $JSOMService.DoStuff();
});

我的服务定义如下

myApp.service('$JSOMService', function ($q, $http) { ... });

处理另一个服务的最佳方法是什么?这与单元测试略有不同,我想知道是否有任何常见的方法可以做到这一点?

现在我只是有一个稍微不同的代码库,我只是切换加载的Angularjs服务javascript文件来处理这个。

1 个答案:

答案 0 :(得分:2)

您可以直接访问控制注入的提供商服务。它看起来像这样,注入了$ provide:

$provide.value('$JSOMService', MockJSOMService());

这基本上就是说,只要有人要求$ JSOMService,就给他们提供从MockJSOMService返回的任何内容。

您可以在设置应用时进行设置。像这样:

myApp.run(['$provide', function($provide) {
    $provide.value('$JSOMService', MockJSOMService());
}]);

这基本上是您可以切换服务的方式。诚然有点时髦,但我希望这有帮助!