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をサービス内にラップして、注入可能にする必要があります。これは、単純な関数パラメーターを介して DI を行う Angular によるものです。だから、次のようなことをしてください:

  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 に答える