2015-03-23 2 views
0

У меня есть фабрика, которая имеет две функции и два локальных метода, я написал тестовый пример жасмина, в котором способ, которым когда SavePref.saveDetails(values, prop); называется я должен ожидать локального метода updateDetails, а также фабричную функцию SavePref.savePref была названа как, как показано нижеЖасмин тест для заводской функции вызова локальной и другой функции - получение ошибки: ожидается шпион, но получил функцию

 SavePref.saveDetails(values, prop); 
     expect(updateDetails).toHaveBeenCalled(); 
     expect(SavePref.savePref).toHaveBeenCalled(); 

Но проблема в том, когда я запускаю тест, я получаю

Error: Expected a spy, but got Function. 

Может кто-нибудь пожалуйста, скажите мне решение этой

Мой завод, как указано ниже

случаев
app.factory('SavePref', function($rootScope, Restangular) { 

      updateFiles = function(prop) { 
       if (!prop.found) { 
        _.merge(prop.oldFiles, prop.newFiles); 
       } 
      }; 

      updateDetails = function(values, newProp) { 
       angular.forEach(values, function(value, index) { 
        newProp.found = false; 
        newProp.datas = value.datas; 
        updateFiles(newProp); 
       }); 
      }; 

      return { 

       savePref: function(newProp) { 
        Restangular.all('rest/savePref').post(newProp).then(function(response) { 
         $rootScope.success = true; 
        }, function(errorResponse) {}); 
       }, 

       saveDetails: function(values, prop) { 
        var newProp = {}; 
        newProp.values= prop.values; 
        newProp.oldFiles = prop.oldFiles; 
        newProp.newFiles = prop.newFiles; 
        updateDetails(values, newProp); 
        this.savePref(newProp); 
       } 
      }; 
     }); 

Мой жасмин Тест

describe('Service: SavePref', function(SavePref) { 
    beforeEach(module('com')); 

    var httpBackend; 
    var RestangularMock; 

    var values; 

    beforeEach(function() { 
     values = { 
      datas: { 
       file1: 'Test1', 
       file2: 'Test2', 
       file3: 'Test3' 
      } 
     }; 
     prop = { 
      oldFiles: 'sampleFile1', 
      newFiles: 'sampleFile2', 
      values: {} 
     }; 

     module(function($provide) { 
      $provide.value('prop', prop); 
     }); 
    }); 

    describe('Testing saveDetails Functions', function() { 
     it('should save details when saveDetails is called', inject(function(SavePref) { 

      SavePref.saveDetails(values, prop); 
      expect(updateDetails).toHaveBeenCalled(); 
      expect(SavePref.savePref).toHaveBeenCalled(); 
     })); 
    }); 
}); 
+0

Вы не создаете объект-шпион? –

ответ

1

Вы должны создать шпиона первый ожидать:

it('should save details when saveDetails is called',inject(function(SavePref) { 

     spyOn(SavePref, "savePref").and.callThrough(); 
     SavePref.saveDetails(values, prop); 
     expect(SavePref.savePref).toHaveBeenCalled(); 
    })); 

Если вы хотите ожидать обновленияДетали, вам придется публиковать его.

В моем примере я позвонил .and.callThrough(), иначе вызов никогда не делался с фактической функцией. Возможно, вы захотите удалить его.

+0

Я получаю 'Ошибка: метод undefined() не существует' –

+0

где в вашем коде? тест или фактический код? –

+0

test, когда я запускаю 'grunt ci', я получаю' Error: undefined() метод не существует' –

Смежные вопросы