2

我正在尝试对我的各个 Angular 工厂进行单元测试,但在尝试正确模拟和注入 PouchDB 对象时遇到了困难。我的工厂代码目前如下:

factory('Track', [function() {
    var db = new PouchDB('tracks');
    var resource = {
        getAll: function() {
          return db.allDocs({include_docs: true});
        }
    return resource;
}]);

我曾尝试使用 Angular 的 $provide 服务注入一个模拟 PouchDB 实例,但没有成功:

 module(function($provide) {
    $provide.value('PouchDB', {
        allDocs: function() {
            return 'MOCKED';
        }
    });

我不完全确定从这里去哪里。任何帮助将不胜感激!

4

1 回答 1

3

正如评论中所说:您必须将全局变量包装在PouchDB服务中以使其可注入。这是由于 Angular 通过简单的函数参数进行 DI。所以只需执行以下操作:

  angular.module('myModule')
     .factory('PouchDBWrapper', function(){
         return PouchDB;
     }

然后你可以将它注入你的 Track 工厂:

 factory('Track', [function(PouchDBWrapper) {
   var db = new PouchDBWrapper('tracks');
   var resource = {
      getAll: function() {
         return db.allDocs({include_docs: true});
      }
    return resource;
}]);

在您的测试中,您可以通过以下方式模拟它:

module(function($provide) {
   $provide.factory('PouchDBWrapper', {
       allDocs: function() {
           return 'MOCKED';
       }
});
于 2014-03-23T18:44:10.547 回答