This repository has been archived by the owner on Jun 16, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
value.spec.js
78 lines (72 loc) · 2.78 KB
/
value.spec.js
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
69
70
71
72
73
74
75
76
77
78
const {createElement} = require('react')
const {create} = require('react-test-renderer')
const FirebaseMock = require('./firebase-mock')
const ValueFactory = require('./value')
describe('value', () => {
it('should render undefined initially', () => {
const {refMock, Firebase} = FirebaseMock()
const Value = ValueFactory(Firebase)
const component = create(createElement(Value, {path: 'some path'},
(value) => `value: ${value}`
))
expect(refMock.mock.calls[0][0]).toBe('some path')
expect(component.toJSON())
.toMatchSnapshot()
})
it('when the value is updated, component is re-rendered', () => {
const {onMock, refMock, Firebase} = FirebaseMock()
const Value = ValueFactory(Firebase)
const component = create(createElement(Value, {path: 'some path'},
(value) => `value: ${value}`
))
expect(refMock.mock.calls[0][0]).toBe('some path')
const listener = onMock.mock.calls[0][1]
listener({
val () {
return 'some value'
}
})
expect(component.toJSON())
.toMatchSnapshot()
})
it('when component is unmounted, listener is removed', () => {
const {onMock, offMock, refMock, Firebase} = FirebaseMock()
const Value = ValueFactory(Firebase)
const component = create(createElement(Value, {path: 'some path'},
(value) => `value: ${value}`
))
expect(refMock.mock.calls[0][0]).toBe('some path')
component.unmount()
expect(onMock.mock.calls.length).toBe(1)
expect(offMock.mock.calls.length).toBe(1)
expect(onMock.mock.calls[0][1]).toBe(offMock.mock.calls[0][1])
})
it('when the path changes a new listener is created', () => {
const {onMock, refMock, Firebase} = FirebaseMock()
const Value = ValueFactory(Firebase)
const component = create(createElement(Value, {path: 'some path'},
(value) => `value: ${value}`
))
expect(refMock.mock.calls[0][0]).toBe('some path')
component.update(createElement(Value, {path: 'some other path'},
(value) => `value: ${value}`
))
expect(refMock.mock.calls[1][0]).toBe('some other path')
expect(onMock.mock.calls.length).toBe(2)
})
it('when the path changes the existing listener is cleaned up', () => {
const {onMock, offMock, refMock, Firebase} = FirebaseMock()
const Value = ValueFactory(Firebase)
const component = create(createElement(Value, {path: 'some path'},
(value) => `value: ${value}`
))
expect(refMock.mock.calls[0][0]).toBe('some path')
component.update(createElement(Value, {path: 'some other path'},
(value) => `value: ${value}`
))
expect(refMock.mock.calls[1][0]).toBe('some other path')
expect(onMock.mock.calls.length).toBe(2)
expect(offMock.mock.calls.length).toBe(1)
expect(onMock.mock.calls[0][1]).toBe(offMock.mock.calls[0][1])
})
})