В моем сценарии я делаю следующее:
1) Получить данные из сокета
2) Поднять событие $scope.$broadcast('socket:newData', data)
3) Посмотреть его в директиве:
$scope.processedData = [];
$scope.$on('socket:newData', function(e,data){
// gets data processed, and adds it to $scope.processedData
myService.dataProcess($scope.processedData, data);
});
В приложении он работает нормально, и я получаю данные. В моем тесте я определяю $rootScope и $compile. Директива хорошо строится, и я делаю несколько тестов для ее изолированной области, а также для HTML, и все, кажется, в порядке (включая загрузку шаблонов и поддиректив).
Проблема в том, что $scope.prcessedData остается пустым.
Вот мой тестовый код:
beforeEach(module('app'));
beforeEach(_inject(function(_$rootScope_, _$compile_, _myService_){
$rootScope = _$rootScope_;
$compile - _$compile_;
myService = _myService_;
element = angular.element('<my-directive></my-directive>');
$compile(element)($rootScope);
}));
beforeEach(function(){
spyOn(myService, 'dataProcess');
var data = getMockData(); // returns some data sample that's in the format of the data recieved from the socket
$rootScope.$broadcast('socket:newData', data);
$rootScope.$apply();
});
it('Processed data should be filled', function(){
// *getExpected* returns the expected processed data
expect(element.isolateScope().processedData).toEqual(getExpected(getMockData()));
});
Но element.isolateScope().processedData возвращает []...
Я пробовал следующее, чтобы убедиться, что функция обработки работает правильно:
it('Expect the function "dataProcess" to run', function(){
expect(myService.dataProcess).toHaveBeenCalledWith(element.isolateScope().processedData, getMockData());
});
Который проходит и по-прежнему element.isolateScope().processedData возвращает []
...
Как я могу получить значения после того, как функция выполнила свою работу?