@@ -3,11 +3,12 @@ const { existsSync } = require('fs');
3
3
const { readFile } = require ( 'fs' ) . promises ;
4
4
const looksLike = require ( 'html-looks-like' ) ;
5
5
const { create, build } = require ( './lib/cli' ) ;
6
- const { snapshot, hasKey , isWithin } = require ( './lib/utils' ) ;
6
+ const { snapshot } = require ( './lib/utils' ) ;
7
7
const { subject } = require ( './lib/output' ) ;
8
8
const images = require ( './images/build' ) ;
9
9
const { promisify } = require ( 'util' ) ;
10
10
const glob = promisify ( require ( 'glob' ) . glob ) ;
11
+ const minimatch = require ( 'minimatch' ) ;
11
12
12
13
const prerenderUrlFiles = [
13
14
'prerender-urls.json' ,
@@ -35,13 +36,15 @@ function getRegExpFromMarkup(markup) {
35
36
return new RegExp ( minifiedMarkup ) ;
36
37
}
37
38
38
- function testMatch ( src , tar ) {
39
- let k , tmp ;
40
- let keys = Object . keys ( tar ) ;
41
- expect ( Object . keys ( src ) ) . toHaveLength ( keys . length ) ;
42
- for ( k in src ) {
43
- expect ( hasKey ( k , keys ) ) . toBeTruthy ( ) ;
44
- if ( ! isWithin ( src [ k ] , tar [ tmp ] ) ) return false ;
39
+ function testMatch ( received , expected ) {
40
+ let receivedKeys = Object . keys ( received ) ;
41
+ let expectedKeys = Object . keys ( expected ) ;
42
+ expect ( receivedKeys ) . toHaveLength ( expectedKeys . length ) ;
43
+ for ( let key in expected ) {
44
+ const receivedKey = receivedKeys . find ( k => minimatch ( k , key ) ) ;
45
+ expect ( key ) . toFindMatchingKey ( receivedKey ) ;
46
+
47
+ expect ( receivedKey ) . toBeCloseInSize ( received [ receivedKey ] , expected [ key ] ) ;
45
48
}
46
49
}
47
50
@@ -184,15 +187,16 @@ describe('preact build', () => {
184
187
expect ( existsSync ( file ) ) . toBe ( true ) ;
185
188
} ) ;
186
189
187
- it ( 'should use template from the code folder' , async ( ) => {
188
- // app with custom template set via preact.config.js
190
+ it ( 'should use custom `template.html`' , async ( ) => {
189
191
let dir = await subject ( 'custom-template' ) ;
190
192
await build ( dir ) ;
191
193
192
194
let file = join ( dir , 'build/index.html' ) ;
193
195
let html = await readFile ( file , 'utf-8' ) ;
194
196
195
- looksLike ( html , images . template ) ;
197
+ expect ( html ) . toEqual (
198
+ expect . stringMatching ( getRegExpFromMarkup ( images . template ) )
199
+ ) ;
196
200
} ) ;
197
201
198
202
it ( 'should patch global location object' , async ( ) => {
@@ -217,28 +221,8 @@ describe('preact build', () => {
217
221
expect ( existsSync ( file ) ) . toBe ( true ) ;
218
222
} ) ;
219
223
220
- it ( 'should inject preact.* variables into template' , async ( ) => {
221
- let dir = await subject ( 'custom-template-2' ) ;
222
- await build ( dir ) ;
223
-
224
- let file = join ( dir , 'build/index.html' ) ;
225
- let html = await readFile ( file , 'utf-8' ) ;
226
-
227
- looksLike ( html , images . templateReplaced ) ;
228
- } ) ;
229
-
230
- it ( 'should replace title with <%= preact.title %>' , async ( ) => {
231
- let dir = await subject ( 'custom-template-3' ) ;
232
- await build ( dir ) ;
233
-
234
- let file = join ( dir , 'build/index.html' ) ;
235
- let html = await readFile ( file , 'utf-8' ) ;
236
-
237
- looksLike ( html , images . templateReplaced ) ;
238
- } ) ;
239
-
240
224
it ( 'should error out for invalid argument' , async ( ) => {
241
- let dir = await subject ( 'custom-template-3 ' ) ;
225
+ let dir = await subject ( 'custom-template' ) ;
242
226
const mockExit = jest . spyOn ( process , 'exit' ) . mockImplementation ( ( ) => { } ) ;
243
227
expect ( build ( dir , { 'service-worker' : false } ) ) . rejects . toEqual (
244
228
new Error ( 'Invalid argument found.' )
0 commit comments