diff --git a/test/runTest/server.js b/test/runTest/server.js index ce701f785a..5361a1b940 100644 --- a/test/runTest/server.js +++ b/test/runTest/server.js @@ -25,6 +25,8 @@ process.on('uncaughtException', (err) => { console.log(); console.error(`Please run \`${chalk.yellow('npm install')}\` in \`${chalk.green('test/runTest')}\` folder first!`); console.log(); + } else { + console.error('Uncaught err:', err); } process.exit(1); }); @@ -53,6 +55,9 @@ const fse = require('fs-extra'); const fs = require('fs'); const open = require('open'); const genReport = require('./genReport'); +const useCNMirror = process.argv.includes('--useCNMirror') || !!process.env.USE_CN_MIRROR; + +console.info(chalk.green('useCNMirror:'), useCNMirror); const CLI_FIXED_THREADS_COUNT = 1; @@ -231,6 +236,18 @@ async function start() { return; } + let stableVersions; + let nightlyVersions; + try { + stableVersions = await fetchVersions(false, useCNMirror); + nightlyVersions = (await fetchVersions(true, useCNMirror)).slice(0, 100); + stableVersions.unshift('local'); + nightlyVersions.unshift('local'); + } catch (e) { + console.error('Failed to fetch version list:', e); + console.log(`Try again later or try the CN mirror with: ${chalk.yellow('npm run test:visual -- -- --useCNMirror')}`) + return; + } let _currentTestHash; let _currentRunConfig; @@ -241,11 +258,6 @@ async function start() { // Start a static server for puppeteer open the html test cases. let {io} = serve(); - const stableVersions = await fetchVersions(false); - const nightlyVersions = (await fetchVersions(true)).slice(0, 100); - stableVersions.unshift('local'); - nightlyVersions.unshift('local'); - io.of('/client').on('connect', async socket => { let isAborted = false; @@ -328,8 +340,8 @@ async function start() { let startTime = Date.now(); - await prepareEChartsLib(data.expectedVersion); // Expected version. - await prepareEChartsLib(data.actualVersion); // Version to test + await prepareEChartsLib(data.expectedVersion, useCNMirror); // Expected version. + await prepareEChartsLib(data.actualVersion, useCNMirror); // Version to test // If aborted in the time downloading lib. if (isAborted) { diff --git a/test/runTest/util.js b/test/runTest/util.js index 4d892b3443..fd718cd3c4 100644 --- a/test/runTest/util.js +++ b/test/runTest/util.js @@ -56,7 +56,7 @@ module.exports.getEChartsTestFileName = function () { return `echarts.test-${config.testVersion}.js`; }; -module.exports.prepareEChartsLib = function (version) { +module.exports.prepareEChartsLib = function (version, useCNMirror) { const versionFolder = path.join(__dirname, getVersionDir(version)); const ecDownloadPath = `${versionFolder}/echarts.js`; @@ -69,27 +69,31 @@ module.exports.prepareEChartsLib = function (version) { return Promise.resolve(); } - return new Promise(resolve => { + return new Promise((resolve, reject) => { const testLibPath = `${versionFolder}/${module.exports.getEChartsTestFileName()}`; if (!fs.existsSync(ecDownloadPath)) { const file = fs.createWriteStream(ecDownloadPath); const isNightly = version.includes('-dev'); const packageName = isNightly ? 'echarts-nightly' : 'echarts' - const url = `https://unpkg.com/${packageName}@${version}/dist/echarts.js`; - console.log(`Downloading ${packageName}@${version} from ${url}`, ); + const url = useCNMirror + ? `https://registry.npmmirror.com/${packageName}/${version}/files/dist/echarts.js` + : `https://unpkg.com/${packageName}@${version}/dist/echarts.js`; + console.log(`Downloading ${packageName}@${version} from ${url}`); https.get(url, response => { response.pipe(file); file.on('finish', () => { - let code = modifyEChartsCode(fs.readFileSync(ecDownloadPath, 'utf-8')); + const code = modifyEChartsCode(fs.readFileSync(ecDownloadPath, 'utf-8')); fs.writeFileSync(testLibPath, code, 'utf-8'); resolve(); }); + }).on('error', (e) => { + reject(`Failed to download ${packageName}@${version} from ${url}: ${e}`); }); } else { - // Always do code modifaction. + // Always do code modification. // In case we need to do replacement on old downloads. let code = modifyEChartsCode(fs.readFileSync(ecDownloadPath, 'utf-8')); fs.writeFileSync(testLibPath, code, 'utf-8'); @@ -98,16 +102,16 @@ module.exports.prepareEChartsLib = function (version) { }); }; -module.exports.fetchVersions = function (isNighlty) { +module.exports.fetchVersions = function (isNightly, useCNMirror) { return new Promise((resolve, reject) => { - https.get( - isNighlty - ? `https://registry.npmjs.org/echarts-nightly` - : `https://registry.npmjs.org/echarts` - , res => { + const npmRegistry = useCNMirror + ? 'https://registry.npmmirror.com' + : 'https://registry.npmjs.org'; + const endpoint = `${npmRegistry}/echarts${isNightly ? '-nightly' : ''}`; + https.get(endpoint, res => { if (res.statusCode !== 200) { res.destroy(); - reject('Failed fetch versions from https://registry.npmjs.org/echarts'); + reject('status code: ' + res.statusCode); return; } var buffers = []; @@ -118,10 +122,11 @@ module.exports.fetchVersions = function (isNighlty) { resolve(Object.keys(JSON.parse(data).versions).reverse()); } catch (e) { - reject(e.toString()); + reject(e); } }); - }); + }) + .on('error', reject); }); }; @@ -156,4 +161,4 @@ module.exports.waitTime = function (time) { resolve(); }, time); }); -}; \ No newline at end of file +};