This repository has been archived by the owner on Mar 17, 2021. It is now read-only.
/
name-option.test.js
119 lines (103 loc) · 3.22 KB
/
name-option.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import path from 'path';
import {
compile,
execute,
getCompiler,
normalizeErrors,
readAsset,
} from './helpers';
describe('"name" option', () => {
it('should work without value', async () => {
const compiler = getCompiler('simple.js');
const stats = await compile(compiler);
expect(
execute(readAsset('main.bundle.js', compiler, stats))
).toMatchSnapshot('result');
expect(normalizeErrors(stats.compilation.warnings)).toMatchSnapshot(
'warnings'
);
expect(normalizeErrors(stats.compilation.errors)).toMatchSnapshot('errors');
});
it('should work with "String" value', async () => {
const compiler = getCompiler('simple.js', {
name: '[hash].string.[ext][query]',
});
const stats = await compile(compiler);
expect(
execute(readAsset('main.bundle.js', compiler, stats))
).toMatchSnapshot('result');
expect(normalizeErrors(stats.compilation.warnings)).toMatchSnapshot(
'warnings'
);
expect(normalizeErrors(stats.compilation.errors)).toMatchSnapshot('errors');
});
it('should work with "Function" value', async () => {
const compiler = getCompiler('simple.js', {
name(resourcePath, resourceQuery) {
expect(resourcePath).toBeDefined();
expect(resourceQuery).toBeDefined();
return '[hash].function.[ext][query]';
},
});
const stats = await compile(compiler);
expect(
execute(readAsset('main.bundle.js', compiler, stats))
).toMatchSnapshot('result');
expect(normalizeErrors(stats.compilation.warnings)).toMatchSnapshot(
'warnings'
);
expect(normalizeErrors(stats.compilation.errors)).toMatchSnapshot('errors');
});
it('should work for CDN support query params', async () => {
const compiler = getCompiler(
'cdn.js',
{
name: '[path][name].[ext][query]',
},
{
output: {
path: path.resolve(__dirname, './outputs'),
publicPath: 'https://cdn.example.com/',
filename: '[name].bundle.js',
chunkFilename: '[name].chunk.js',
},
}
);
const stats = await compile(compiler);
expect(
execute(readAsset('main.bundle.js', compiler, stats))
).toMatchSnapshot('result');
expect(normalizeErrors(stats.compilation.warnings)).toMatchSnapshot(
'warnings'
);
expect(normalizeErrors(stats.compilation.errors)).toMatchSnapshot('errors');
});
it('should mark hashed asset as immutable', async () => {
const compiler = getCompiler('simple.js', {
name: '[md5:hash:hex:8].asset.[ext]',
});
const stats = await compile(compiler);
let assetInfo;
for (const [name, info] of stats.compilation.assetsInfo) {
if (name.match('asset.')) {
assetInfo = info;
break;
}
}
expect(assetInfo.immutable).toBe(true);
});
it('should not mark unhashed asset as immutable', async () => {
const compiler = getCompiler('simple.js', {
name: 'asset.[ext]',
});
const stats = await compile(compiler);
let assetInfo;
for (const [name, info] of stats.compilation.assetsInfo) {
if (name.match('asset.')) {
assetInfo = info;
break;
}
}
expect(assetInfo.immutable).toBe(false);
});
});