/
user.effect.spec.ts
68 lines (57 loc) · 2.04 KB
/
user.effect.spec.ts
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { UserUpsertRequest, UserUpsertSuccess } from './user.action';
import { IUser, INonSensitiveUser } from '../../model/user';
import { hot, cold } from 'jasmine-marbles';
import { UserEffects } from './user.effect';
import { UserService } from '../../services/user/user.service';
import { TestActions, getActions } from '../test';
import { ToastrService } from 'ngx-toastr';
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { Actions } from '@ngrx/effects';
import { of } from 'rxjs';
import { AngularFirestore } from '@angular/fire/firestore';
class MockToastrService {
// tslint:disable-next-line:no-empty
error(message: string) {}
}
class MockAngularFireStore {}
const testNonSensitiveUser: INonSensitiveUser = {
id: 'id',
name: 'name'
};
describe('User effects', () => {
let actions$: TestActions;
let service: UserService;
let effects: UserEffects;
let toastr: ToastrService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [
UserService,
UserEffects,
{ provide: Actions, useFactory: getActions },
{ provide: ToastrService, useClass: MockToastrService },
{ provide: AngularFirestore, useClass: MockAngularFireStore }
]
});
actions$ = TestBed.get(Actions);
service = TestBed.get(UserService);
effects = TestBed.get(UserEffects);
toastr = TestBed.get(ToastrService);
spyOn(service, 'save').and.returnValue(of(testNonSensitiveUser));
spyOn(toastr, 'error');
});
it('returns a UserUpsertSuccess, if request is successful ', () => {
const testUser: IUser = {
uid: 'uid',
email: 'email1',
...testNonSensitiveUser
};
const action = new UserUpsertRequest(testUser);
actions$.stream = hot('-a', { a: action });
const completionAction = new UserUpsertSuccess(testUser);
const expected = cold('-b', { b: completionAction });
expect(effects.upsertUsers$).toBeObservable(expected);
});
});