测试简单的 Action

考虑下面的简单动作,取自本书的Redux章节:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { Injectable } from '@angular/core';
import { NgRedux } from 'ng2-redux';

export const INCREMENT_COUNTER = 'INCREMENT_COUNTER';
export const DECREMENT_COUNTER = 'DECREMENT_COUNTER';

@Injectable
export class CounterActions {
constructor(private redux: NgRedux<any>) {}

increment() {
this.redux.dispatch({ type: INCREMENT_COUNTER });
}

decrement() {
this.redux.dispatch({ type: DECREMENT_COUNTER });
}
}

这些是很简单的测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { NgRedux } from 'ng2-redux';
import {
CounterActions,
INCREMENT_COUNTER,
DECREMENT_COUNTER,
} from './counter';

// Mock out the NgRedux class with just enough to test what we want.
class MockRedux extends NgRedux<any> {
constructor() {
super(null);
}
dispatch = () => undefined;
}

describe('counter action creators', () => {
let actions: CounterActions;
let mockRedux: NgRedux<any>;

beforeEach(() => {
// Initialize mock NgRedux and create a new instance of the
// ActionCreatorService to be tested.
mockRedux = new MockRedux();
actions = new CounterActions(mockRedux);
});

it('increment should dispatch INCREMENT_COUNTER action', () => {
const expectedAction = {
type: INCREMENT_COUNTER
};

spyOn(mockRedux, 'dispatch');
actions.increment();

expect(mockRedux.dispatch).toHaveBeenCalled();
expect(mockRedux.dispatch).toHaveBeenCalledWith(expectedAction);
});

it('decrement should dispatch DECREMENT_COUNTER action', () => {
const expectedAction = {
type: DECREMENT_COUNTER
};

spyOn(mockRedux, 'dispatch');
actions.decrement();

expect(mockRedux.dispatch).toHaveBeenCalled();
expect(mockRedux.dispatch).toHaveBeenCalledWith(expectedAction);
});
});

我们只是确保我们的action创建者正确地分派actions。