7
7
import { assertMatchesDOM } from '@salesforce-ux/instant-vrt/matcher' ;
8
8
import childProcess from 'child_process' ;
9
9
import express from 'express' ;
10
- import openport from 'openport ' ;
10
+ import fetch from 'isomorphic-fetch ' ;
11
11
import path from 'path' ;
12
12
import puppeteer from 'puppeteer' ;
13
13
import React from 'react' ;
@@ -16,42 +16,76 @@ import ReactDOM from 'react-dom/server';
16
16
import { beautify } from './shared/utils/beautify' ;
17
17
import { renderWithBetterError } from './shared/utils/react' ;
18
18
19
- const getMarkupAndStyle = selector => `
20
- (function() {
21
- const el = document.querySelector("${ selector } ")
22
- const kids = Array.from(el.querySelectorAll('*'))
23
- const extractCSS = el => getComputedStyle(el).cssText;
24
- return {
25
- html: el.outerHTML,
26
- style: [extractCSS(el)].concat(kids.map(extractCSS))
27
- }
28
- })()
29
- ` ;
19
+ // const getMarkupAndStyle = selector => `
20
+ // (function() {
21
+ // const el = document.querySelector("${selector}")
22
+ // const kids = Array.from(el.querySelectorAll('*'))
23
+ // const extractCSS = el => getComputedStyle(el).cssText;
24
+ // return {
25
+ // html: el.outerHTML,
26
+ // style: [extractCSS(el)].concat(kids.map(extractCSS))
27
+ // }
28
+ // })()
29
+ // `;
30
30
31
- const delay = delay =>
32
- new Promise ( resolve => {
33
- setTimeout ( resolve , delay ) ;
34
- } ) ;
31
+ // const startServer = p =>
32
+ // new Promise(( resolve, reject) => {
33
+ // const server = app.listen(p, () => resolve(server)).on('error', reject );
34
+ // });
35
35
36
- const app = express ( ) ;
36
+ // const delay = delay =>
37
+ // new Promise(resolve => {
38
+ // setTimeout(resolve, delay);
39
+ // });
37
40
38
- app . get ( '/' , ( req , res ) => {
39
- res . send ( `
40
- <!doctype>
41
- <html>
42
- <head>
43
- <link type="text/css" rel="stylesheet" href="/assets/styles/index.css" />
44
- </head>
45
- <body></body>
46
- </html>
47
- ` ) ;
48
- } ) ;
49
- app . use ( '/assets' , express . static ( path . resolve ( __dirname , 'assets' ) ) ) ;
41
+ // const app = express();
42
+ //
43
+ // app.get('/', (req, res) => {
44
+ // res.send(`
45
+ // <!doctype>
46
+ // <html>
47
+ // <head>
48
+ // <link type="text/css" rel="stylesheet" href="/assets/styles/index.css" />
49
+ // <style type="text/css"
50
+ // </head>
51
+ // <body></body>
52
+ // </html>
53
+ // `);
54
+ // });
55
+ //
56
+ // app.use('/assets', express.static(path.resolve(__dirname, 'assets')));
50
57
51
- let server ;
52
- let browser ;
53
- let page ;
54
58
let CURRENT_TEST_NAME ;
59
+ // let server;
60
+ // let browser;
61
+ // let page;
62
+
63
+ // beforeAll(async () => {
64
+ // server = await startServer(12345);
65
+ // browser = await puppeteer.launch({ args: ['--no-sandbox'] });
66
+ // page = await browser.newPage();
67
+ // await page.emulate({
68
+ // userAgent:
69
+ // 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',
70
+ // viewport: {
71
+ // width: 1280,
72
+ // height: 800,
73
+ // deviceScaleFactor: 1,
74
+ // isMobile: false,
75
+ // hasTouch: false,
76
+ // isLandscape: false
77
+ // }
78
+ // });
79
+ // await page.goto(`http://localhost:12345`);
80
+ // });
81
+
82
+ // afterAll(async () => {
83
+ // await page.close();
84
+ // await browser.close();
85
+ // await new Promise(resolve => {
86
+ // server.close(() => resolve());
87
+ // });
88
+ // });
55
89
56
90
export default ( dirname , port ) => {
57
91
jasmine . getEnv ( ) . addReporter ( {
@@ -60,56 +94,6 @@ export default (dirname, port) => {
60
94
}
61
95
} ) ;
62
96
63
- const getPort = ( ) =>
64
- new Promise ( ( resolve , reject ) => {
65
- openport . find ( function ( err , port ) {
66
- err ? reject ( err ) : resolve ( port ) ;
67
- } ) ;
68
- } ) ;
69
-
70
- const startServer = p =>
71
- new Promise ( ( resolve , reject ) => {
72
- const server = app . listen ( p , ( ) => resolve ( server ) ) . on ( 'error' , reject ) ;
73
- } ) ;
74
-
75
- beforeAll ( async ( ) => {
76
- // Server gets started before each suite and then closed afterwards
77
- // This needs to be here so that matchesMarkupAndStyle() will work even when
78
- // not using the watcher
79
- port = port || ( await getPort ( ) ) ;
80
- console . log ( 'running on port' , port ) ;
81
- try {
82
- server = await startServer ( port ) ;
83
- } catch ( e ) {
84
- console . log ( 'failed to start server' , e ) ;
85
- port = await getPort ( ) ;
86
- console . log ( 'trying new port' , port ) ;
87
- server = await startServer ( port ) ; // only try twice
88
- }
89
- browser = await puppeteer . launch ( { args : [ '--no-sandbox' ] } ) ;
90
- page = await browser . newPage ( ) ;
91
- await page . emulate ( {
92
- userAgent :
93
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36' ,
94
- viewport : {
95
- width : 1280 ,
96
- height : 800 ,
97
- deviceScaleFactor : 1 ,
98
- isMobile : false ,
99
- hasTouch : false ,
100
- isLandscape : false
101
- }
102
- } ) ;
103
- await page . goto ( `http://localhost:${ port } ` ) ;
104
- } ) ;
105
-
106
- afterAll ( async ( ) => {
107
- browser . close ( ) ;
108
- await new Promise ( resolve => {
109
- server . close ( ( ) => resolve ( ) ) ;
110
- } ) ;
111
- } ) ;
112
-
113
97
return {
114
98
matchesMarkupAndStyle : async element => {
115
99
const renderedMarkup =
@@ -119,10 +103,17 @@ export default (dirname, port) => {
119
103
element ,
120
104
`${ CURRENT_TEST_NAME } failed on ${ element } `
121
105
) ;
122
- await page . evaluate ( `document.body.innerHTML = \`${ renderedMarkup } \`` ) ;
123
- await delay ( 750 ) ;
124
- const markupAndStyle = await page
125
- . evaluate ( getMarkupAndStyle ( 'body > *' ) )
106
+ const markupAndStyle = await fetch (
107
+ 'http://localhost:12345/api/getMarkupAndStyle' ,
108
+ {
109
+ method : 'POST' ,
110
+ headers : {
111
+ 'Content-Type' : 'text/plain'
112
+ } ,
113
+ body : renderedMarkup
114
+ }
115
+ )
116
+ . then ( res => res . json ( ) )
126
117
. then ( diff => ( { html : beautify ( renderedMarkup ) , style : diff . style } ) ) ;
127
118
assertMatchesDOM ( dirname , CURRENT_TEST_NAME , markupAndStyle ) ;
128
119
}
0 commit comments