2

js-dataプロジェクトではandを使用js-data-angularします。

私は次のモデルを持っています:

(function () {
  'use strict';
  angular.module('dash.models')
    .factory('Diagnosis', ['DS', function (DS) {
      function transform(resourcename, attrs, cb) {
        attrs.icd9codes.forEach(function (el) {
          delete el.add;
        });
        cb(null, attrs);
      }

      this.transform = transform;

      return DS.defineResource({
        name: 'diagnosis',
        idAttribute: 'id',
        endpoint: '/diagnosis',
        baseUrl: '/api',
        beforeCreate: transform,
        beforeUpdate: transform
      });
    }]);

}());

そして、上記のモデルへの次の呼び出し:

    var startEditing = self.startEditing = function(parentScope, diagnosis) {
      Diagnosis.findAll({
        deep:true
      }, {
        endpoint: '/diagnosis/' + diagnosis.id
      }).then(function(d) {
        $scope.diagnosis = d;
        $scope.inScope = true;
      });
    };

私の単体テストでは、次のように呼び出しをモックします。

var diagDeferred = _$q_.defer();
    diagDeferred.resolve({
      'name': 'Breast',
      'categories': null,
      'id': '026c7cd0-14ef-4312-a8f1-2092107b0e50',
      'icd9codes': [{id: '1', code: '001', description: 'ICD9 Code'}]
    });

    spyOn(Diagnosis, 'findAll').and.returnValue(diagDeferred.promise);

そして、実際の呼び出しは嘲笑され、実行されないのは (そして、これを実行する方法に関する信頼できる情報を見つけることができません) は.thenDiagnosis.findAll

コードが機能することはわかっていますが、単体テストでカバーする必要があり、うまくいきません。

ありがとう。

4

1 に答える 1

3

テストで呼び出すのを忘れたと思います$scope.digest()。ここに実用的なフィドルがあります。

を呼び出した後、モックが実行され、データをブロックで取得できるようにstartEditing()呼び出す必要があります。それが役に立てば幸い。$scope.$digest()promisethen

于 2015-05-12T05:10:00.020 に答える