Browse Source
* ✂️ dependency:remove puppeteer in dependencies * fix lint error * remove catch install * ⚡️ performance: use detectInstaller package mange * 📝 docs: add some comment * finish set test * Modify the order and increase the search speed * auto close browserpull/6255/head
committed by
GitHub
9 changed files with 142 additions and 91 deletions
@ -1,16 +0,0 @@ |
|||
import puppeteer from 'puppeteer'; |
|||
|
|||
const getBrowser = async () => { |
|||
const browser = await puppeteer.launch({ |
|||
args: [ |
|||
'--disable-gpu', |
|||
'--disable-dev-shm-usage', |
|||
'--no-first-run', |
|||
'--no-zygote', |
|||
'--no-sandbox', |
|||
], |
|||
}); |
|||
return browser; |
|||
}; |
|||
|
|||
module.exports = getBrowser; |
|||
@ -1,36 +0,0 @@ |
|||
const getBrowser = require('./getBrowser'); |
|||
|
|||
const BASE_URL = `http://localhost:${process.env.PORT || 8000}`; |
|||
|
|||
let browser; |
|||
let page; |
|||
|
|||
beforeAll(async () => { |
|||
browser = await getBrowser(); |
|||
}); |
|||
|
|||
beforeEach(async () => { |
|||
page = await browser.newPage(); |
|||
await page.goto(`${BASE_URL}`); |
|||
await page.evaluate(() => { |
|||
localStorage.setItem('antd-pro-authority', '["admin"]'); |
|||
}); |
|||
}); |
|||
|
|||
describe('Homepage', () => { |
|||
it('topmenu should have footer', async () => { |
|||
const params = '?navTheme=light&layout=topmenu'; |
|||
await page.goto(`${BASE_URL}${params}`); |
|||
await page.waitForSelector('footer', { |
|||
timeout: 2000, |
|||
}); |
|||
const haveFooter = await page.evaluate( |
|||
() => document.getElementsByTagName('footer').length > 0, |
|||
); |
|||
expect(haveFooter).toBeTruthy(); |
|||
}); |
|||
}); |
|||
|
|||
afterAll(() => { |
|||
browser.close(); |
|||
}); |
|||
@ -0,0 +1,41 @@ |
|||
// eslint-disable-next-line
|
|||
const NodeEnvironment = require('jest-environment-node'); |
|||
const getBrowser = require('./getBrowser'); |
|||
|
|||
class PuppeteerEnvironment extends NodeEnvironment { |
|||
// Jest is not available here, so we have to reverse engineer
|
|||
// the setTimeout function, see https://github.com/facebook/jest/blob/v23.1.0/packages/jest-runtime/src/index.js#L823
|
|||
setTimeout(timeout) { |
|||
if (this.global.jasmine) { |
|||
// eslint-disable-next-line no-underscore-dangle
|
|||
this.global.jasmine.DEFAULT_TIMEOUT_INTERVAL = timeout; |
|||
} else { |
|||
this.global[Symbol.for('TEST_TIMEOUT_SYMBOL')] = timeout; |
|||
} |
|||
} |
|||
|
|||
async setup() { |
|||
const browser = await getBrowser(); |
|||
const page = await browser.newPage(); |
|||
this.global.browser = browser; |
|||
this.global.page = page; |
|||
} |
|||
|
|||
async teardown() { |
|||
const { page, browser } = this.global; |
|||
|
|||
if (page) { |
|||
await page.close(); |
|||
} |
|||
|
|||
if (browser) { |
|||
await browser.disconnect(); |
|||
} |
|||
|
|||
if (browser) { |
|||
await browser.close(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
module.exports = PuppeteerEnvironment; |
|||
@ -0,0 +1,39 @@ |
|||
/* eslint-disable global-require */ |
|||
/* eslint-disable import/no-extraneous-dependencies */ |
|||
const { execSync } = require('child_process'); |
|||
const { join } = require('path'); |
|||
const findChrome = require('carlo/lib/find_chrome'); |
|||
const detectInstaller = require('detect-installer'); |
|||
|
|||
const installPuppeteer = () => { |
|||
// find can use package manger
|
|||
const packages = detectInstaller(join(__dirname, '../../')); |
|||
// get installed package manger
|
|||
const packageName = packages.find(detectInstaller.hasPackageCommand) || 'npm'; |
|||
console.log(`🤖 will use ${packageName} install puppeteer`); |
|||
const command = `${packageName} ${packageName.includes('yarn') ? 'add' : 'i'} puppeteer`; |
|||
execSync(command, { |
|||
stdio: 'inherit', |
|||
}); |
|||
}; |
|||
|
|||
const initPuppeteer = async () => { |
|||
try { |
|||
// eslint-disable-next-line import/no-unresolved
|
|||
const findChromePath = await findChrome({}); |
|||
const { executablePath } = findChromePath; |
|||
console.log(`🧲 find you browser in ${executablePath}`); |
|||
return; |
|||
} catch (error) { |
|||
console.log('🧲 no find chrome'); |
|||
} |
|||
|
|||
try { |
|||
require.resolve('puppeteer'); |
|||
} catch (error) { |
|||
// need install puppeteer
|
|||
await installPuppeteer(); |
|||
} |
|||
}; |
|||
|
|||
initPuppeteer(); |
|||
@ -0,0 +1,45 @@ |
|||
/* eslint-disable global-require */ |
|||
/* eslint-disable import/no-extraneous-dependencies */ |
|||
const findChrome = require('carlo/lib/find_chrome'); |
|||
|
|||
const getBrowser = async () => { |
|||
try { |
|||
// eslint-disable-next-line import/no-unresolved
|
|||
const puppeteer = require('puppeteer'); |
|||
const browser = await puppeteer.launch({ |
|||
args: [ |
|||
'--disable-gpu', |
|||
'--disable-dev-shm-usage', |
|||
'--no-first-run', |
|||
'--no-zygote', |
|||
'--no-sandbox', |
|||
], |
|||
}); |
|||
return browser; |
|||
} catch (error) { |
|||
// console.log(error)
|
|||
} |
|||
|
|||
try { |
|||
// eslint-disable-next-line import/no-unresolved
|
|||
const puppeteer = require('puppeteer-core'); |
|||
const findChromePath = await findChrome({}); |
|||
const { executablePath } = findChromePath; |
|||
const browser = await puppeteer.launch({ |
|||
executablePath, |
|||
args: [ |
|||
'--disable-gpu', |
|||
'--disable-dev-shm-usage', |
|||
'--no-first-run', |
|||
'--no-zygote', |
|||
'--no-sandbox', |
|||
], |
|||
}); |
|||
return browser; |
|||
} catch (error) { |
|||
console.log('🧲 no find chrome'); |
|||
} |
|||
throw new Error('no find puppeteer'); |
|||
}; |
|||
|
|||
module.exports = getBrowser; |
|||
@ -1,22 +0,0 @@ |
|||
import 'jsdom-global/register'; |
|||
|
|||
// browserMocks.js
|
|||
const localStorageMock = (() => { |
|||
let store = {}; |
|||
|
|||
return { |
|||
getItem(key) { |
|||
return store[key] || null; |
|||
}, |
|||
setItem(key, value) { |
|||
store[key] = value.toString(); |
|||
}, |
|||
clear() { |
|||
store = {}; |
|||
}, |
|||
}; |
|||
})(); |
|||
|
|||
Object.defineProperty(window, 'localStorage', { |
|||
value: localStorageMock, |
|||
}); |
|||
Loading…
Reference in new issue