-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtest.js
70 lines (58 loc) · 1.89 KB
/
test.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
import classnames from './index';
const styles = {
main: {
backgroundColor: 'red'
},
foo: {
content: 'bar'
},
hello: {
content: 'world'
}
};
const cn = classnames(styles);
describe('constructor', () => {
it('is a function', () =>
expect(classnames).toBeFunction()
);
it('returns a function', () => {
expect(cn).toBeFunction();
});
});
describe('concator', () => {
it('returns an array', () => {
expect(cn()).toBeArray();
});
describe('returns selected styles by', () => {
it('strings', () => {
expect(cn('main')).toEqual([ styles.main ]);
expect(cn('main', 'foo')).toEqual([ styles.main, styles.foo ]);
});
it('array', () => {
expect(cn(['main'])).toEqual([ styles.main ]);
expect(cn(['main'])).toEqual([ styles.main ]);
expect(cn(['main', ['foo'], [[[{ hello: true }]]]])).toEqual([ styles.main, styles.foo, styles.hello ]);
});
it('object', () => {
expect(cn({ main: true })).toEqual([ styles.main ]);
expect(cn({ main: true, hello: false }, { foo: true })).toEqual([ styles.main, styles.foo ]);
});
it('combination of strings, array and object', () => {
expect(cn('main', { foo: true }, ['hello'])).toEqual([ styles.main, styles.foo, styles.hello ]);
});
});
describe('edge cases', () => {
it('supports computed keys', () => {
const ai = 'ai';
expect(cn(`m${ai}n`)).toEqual([ styles.main ]);
expect(cn({ [`m${ai}n`]: true })).toEqual([ styles.main ]);
expect(cn([`m${ai}n`])).toEqual([ styles.main ]);
})
it('ignores not available styles', () => {
expect(cn('main', ['ok'], { this: true, vars: false }, ['should', 'not', 'appear'], 'in the styles')).toEqual([ styles.main ]);
})
it('handles nested arrays', () => {
expect(cn(['this', ['is', 'a', ['nested'], ['list:', ['main']]]])).toEqual([ styles.main ]);
})
});
});