Skip to content

Commit 133e17f

Browse files
committed
Make the promise-testing somewhat nicer and actually commit all the files this time (see #41)
1 parent 4239ed8 commit 133e17f

File tree

3 files changed

+79
-0
lines changed

3 files changed

+79
-0
lines changed

test/stateSpec.js

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
describe('state', function () {
2+
3+
beforeEach(module('ui.state'));
4+
5+
describe('(transitions and related promises)', function () {
6+
var A = { data: {} };
7+
8+
beforeEach(module(function ($stateProvider) {
9+
$stateProvider.state('A', A)
10+
}));
11+
12+
it('.current is always defined', inject(function ($state) {
13+
expect($state.current).toBeDefined();
14+
}));
15+
16+
it('.$current is always defined', inject(function ($state) {
17+
expect($state.$current).toBeDefined();
18+
}));
19+
20+
it('.$current wraps the raw state object', inject(function ($state) {
21+
resolvedValue($state.transitionTo(A, {}));
22+
expect($state.$current.data).toBe(A.data); // 'data' is reserved for app use
23+
}));
24+
25+
it('.transitionTo() returns a promise for the target state', inject(function ($state) {
26+
var trans = $state.transitionTo(A, {});
27+
expect(resolvedValue(trans)).toBe(A);
28+
}));
29+
30+
it('.current updates asynchronously as the transitionTo() promise is resolved', inject(function ($state) {
31+
var trans = $state.transitionTo(A, {});
32+
expect($state.current).not.toBe(A);
33+
resolvedValue(trans);
34+
expect($state.current).toBe(A);
35+
}));
36+
37+
it('.$transition is always the current or last transition', inject(function ($state) {
38+
expect($state.$transition).toBeDefined();
39+
expect(resolvedValue($state.$transition)).toBe($state.current);
40+
var trans = $state.transitionTo(A, {});
41+
expect($state.$transition).toBeDefined();
42+
expect($state.$transition).toBe(trans);
43+
resolvedValue(trans);
44+
expect($state.$transition).toBe(trans);
45+
}));
46+
47+
it('.transition is null when no transition is taking place', inject(function ($state) {
48+
expect($state.transition).toBeNull();
49+
resolvedValue($state.transitionTo(A, {}));
50+
expect($state.transition).toBeNull();
51+
}));
52+
});
53+
});

test/testUtils.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
function resolvePromise(promise) {
2+
if (!promise.then) throw new Error('Expected a promise, but got ' + jasmine.pp(promise) + '.');
3+
4+
var result;
5+
promise.then(function (value) {
6+
result = { success: true, value: value };
7+
}, function (error) {
8+
result = { success: false, error: error };
9+
});
10+
11+
jasmine.getEnv().currentSpec.$injector.get('$rootScope').$digest();
12+
if (!result) throw new Error('Promise is still pending');
13+
return result;
14+
}
15+
16+
function resolvedValue(promise) {
17+
var result = resolvePromise(promise);
18+
if (!result.success) throw result.error;
19+
return result.value;
20+
}
21+
22+
function resolvedError(promise) {
23+
var result = resolvePromise(promise);
24+
if (result.success) throw new Error('Promise was expected to fail but returned ' + jasmin.pp(res.value) + '.');
25+
return result.error;
26+
}

test/urlRouteSpec.js

Whitespace-only changes.

0 commit comments

Comments
 (0)