'use strict'; angular.module('stateMock',[]); angular.module('stateMock').service('$state', function($q){ this.expectedTransitions = []; this.transitionTo = function(stateName){ if(this.expectedTransitions.length > 0){ var expectedState = this.expectedTransitions.shift(); if(expectedState !== stateName){ throw Error('Expected transition to state: ' + expectedState + ' but transitioned to ' + stateName ); } }else{ throw Error('No more transitions were expected! Tried to transition to '+ stateName ); } var deferred = $q.defer(); var promise = deferred.promise; deferred.resolve(); return promise; }; this.go = this.transitionTo; this.expectTransitionTo = function(stateName){ this.expectedTransitions.push(stateName); }; this.ensureAllTransitionsHappened = function(){ if(this.expectedTransitions.length > 0){ throw Error('Not all transitions happened!'); } }; });