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