fix flasky test

pull/7076/head
baseballyama 5 years ago
parent 99a04c464d
commit cf5cfb556e

@ -4,7 +4,7 @@ import * as http from 'http';
import { rollup } from 'rollup';
import virtual from '@rollup/plugin-virtual';
import puppeteer from 'puppeteer';
import { addLineNumbers, loadConfig, loadSvelte } from '../helpers';
import { addLineNumbers, loadConfig, loadSvelte, getNewPage } from '../helpers';
import { deepEqual } from 'assert';
const page = `
@ -18,7 +18,6 @@ const assert = fs.readFileSync(`${__dirname}/assert.js`, 'utf-8');
describe('custom-elements', function () {
this.timeout(10000);
let svelte;
let server;
let browser;
@ -44,12 +43,16 @@ describe('custom-elements', function() {
});
}
async function launchPuppeteer() {
return await puppeteer.launch();
}
before(async () => {
svelte = loadSvelte();
console.log('[custom-element] Loaded Svelte');
server = await create_server();
console.log('[custom-element] Started server');
browser = await puppeteer.launch();
browser = await launchPuppeteer();
console.log('[custom-element] Launched puppeteer browser');
});
@ -108,26 +111,7 @@ describe('custom-elements', function() {
const result = await bundle.generate({ format: 'iife', name: 'test' });
code = result.output[0].code;
const page = await browser.newPage();
page.on('console', (type) => {
console[type._type](type._text);
});
page.on('error', error => {
console.log('>>> an error happened');
console.error(error);
});
try {
await page.goto('http://localhost:6789');
const result = await page.evaluate(() => test(document.querySelector('main')));
if (result) console.log(result);
} catch (err) {
console.log(addLineNumbers(code));
throw err;
} finally {
function assertWarnings() {
if (expected_warnings) {
deepEqual(warnings.map(w => ({
code: w.code,
@ -138,6 +122,27 @@ describe('custom-elements', function() {
})), expected_warnings);
}
}
// NOTE: Chromium may exit due to SIGSEGV, so retry in that case.
let count = 0;
do {
count++;
try {
const page = await getNewPage(browser);
await page.goto('http://localhost:6789');
const result = await page.evaluate(() => test(document.querySelector('main')));
if (result) console.log(result);
assertWarnings();
break;
} catch (err) {
if (count === 5 || browser.isConnected()) {
console.log(addLineNumbers(code));
assertWarnings();
throw err;
}
browser = await launchPuppeteer();
}
} while (count <= 5);
});
});
});

@ -5,10 +5,11 @@ import * as path from 'path';
import * as fs from 'fs';
import * as colors from 'kleur';
export const assert = (assert$1 as unknown) as typeof assert$1 & { htmlEqual: (actual, expected, message?) => void, htmlEqualWithComments: (actual, expected, message?) => void };
import { Browser, Page } from 'puppeteer';
// for coverage purposes, we need to test source files,
// but for sanity purposes, we need to test dist files
export function loadSvelte(test) {
export function loadSvelte(test: boolean = false) {
process.env.TEST = test ? 'true' : '';
const resolved = require.resolve('../compiler.js');
@ -279,3 +280,20 @@ export function prettyPrintPuppeteerAssertionError(message) {
assert.equal(match[1], match[2]);
}
}
export async function getNewPage(browser: Browser): Promise<Page> {
const pages = await browser.pages();
if (pages.length) return pages[0];
const page = await browser.newPage();
page.on('console', (type) => {
console[type._type](type._text);
});
page.on('error', error => {
console.log('>>> an error happened');
console.error(error);
});
return page;
}

@ -9,7 +9,8 @@ import {
loadConfig,
loadSvelte,
mkdirp,
prettyPrintPuppeteerAssertionError
prettyPrintPuppeteerAssertionError,
getNewPage
} from '../helpers';
import { deepEqual } from 'assert';
@ -48,6 +49,10 @@ function create_server() {
});
}
async function launchPuppeteer() {
return await puppeteer.launch();
}
const assert = fs.readFileSync(`${__dirname}/assert.js`, 'utf-8');
describe('runtime (puppeteer)', () => {
@ -56,7 +61,7 @@ describe('runtime (puppeteer)', () => {
console.log('[runtime-puppeteer] Loaded Svelte');
server = await create_server();
console.log('[runtime-puppeteer] Started server');
browser = await puppeteer.launch();
browser = await launchPuppeteer();
console.log('[runtime-puppeteer] Launched puppeteer browser');
});
@ -205,27 +210,7 @@ describe('runtime (puppeteer)', () => {
const result = await bundle.generate({ format: 'iife', name: 'test' });
code = result.output[0].code;
const page = await browser.newPage();
page.on('console', (type) => {
console[type._type](type._text);
});
page.on('error', error => {
console.log('>>> an error happened');
console.error(error);
});
try {
await page.goto('http://localhost:6789');
const result = await page.evaluate(() => test(document.querySelector('main')));
if (result) console.log(result);
} catch (err) {
failed.add(dir);
prettyPrintPuppeteerAssertionError(err.message);
throw err;
} finally {
function assertWarnings() {
if (config.warnings) {
deepEqual(warnings.map(w => ({
code: w.code,
@ -240,6 +225,27 @@ describe('runtime (puppeteer)', () => {
throw new Error('Received unexpected warnings');
}
}
// NOTE: Chromium may exit due to SIGSEGV, so retry in that case.
let count = 0;
do {
count++;
try {
const page = await getNewPage(browser);
await page.goto('http://localhost:6789');
const result = await page.evaluate(() => test(document.querySelector('main')));
if (result) console.log(result);
assertWarnings();
break;
} catch (err) {
if (count === 5 || browser.isConnected()) {
failed.add(dir);
prettyPrintPuppeteerAssertionError(err.message);
assertWarnings();
throw err;
}
browser = await launchPuppeteer();
}
} while (count <= 5);
});
}

Loading…
Cancel
Save