mardi 24 mars 2015

Jasmine + AngularJS: How to add value in $rootScope using provide

I have an angular service class : -



'use strict';
angular.module('triggerTips')
.service('userData', function ($rootScope, $http, $log, $firebase) {

this._log = {
service : 'userData'
};

// Synchronized objects storing the user data
var config;
var userState;

// Loads the user data from firebase
this.init = function(readyCallback) {
var log = angular.extend({}, this._log);
log.funct = 'init';

var fireRef = new Firebase('http://ift.tt/1GOf4Vn' + $rootScope.clientName);
config = $firebase(fireRef.child('config')).$asObject();
userState = $firebase(fireRef.child('userState').child($rootScope.userName)).$asObject();

Promise.all([config.$loaded(), userState.$loaded()]).
then(
function() {
if(config == null || Object.keys(config).length < 4) {
log.message = 'Invalid config';
$log.error(log);
return;
}

if(!userState.userProperties) {
userState.userProperties = {};
}

if(!userState.contentProperties) {
userState.contentProperties = {};
}

log.message = 'User Properties: ' + JSON.stringify(userState.userProperties);
$log.debug(log);

log.message = 'Content Properties: ' + JSON.stringify(userState.contentProperties);
$log.debug(log);

log.message = 'Loaded user data from firebase';
$log.debug(log);
readyCallback();
},
function() {
log.message = 'Unable to load user data from firebase';
$log.error(log);
}
);
};
// Returns the initial tip configuration
this.getConfig = function() {
return config;
};
});


I am trying to unit test this service using jasmine:-


my unit test is :-



describe('Service: userData', function () {

// load the service's module
beforeEach(function() {
module('triggerTips');
});

// instantiate service
var userData;
var rootScope;
beforeEach(inject(function (_userData_, $rootScope) {
rootScope = $rootScope;
userData = _userData_;
}));

it('should load correctly', function () {
expect(!!userData).toBe(true);
});

describe('after being initialized', function () {

beforeEach(function(done) {
// Unable to get this working because the callback is never called
userData.init(function() {
done();
});
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;
});

it('should have a valid config', function (done) {
setTimeout(function() {
expect(Object.keys(userData.getConfig()).length > 3);
done();
}, 1500);
});
});
});


I am receiving an error :


Error: Firebase.child failed: First argument was an invalid path: "undefiend".


Can somebody help me providing working example of my code with some explanation?


Aucun commentaire:

Enregistrer un commentaire