@revoloo/cypress6
Version:
Cypress.io end to end testing tool
147 lines (124 loc) • 4.42 kB
text/typescript
require('../spec_helper')
import { firefoxGcWarning, detect, detectByPath, setMajorVersion } from '../../lib/detect'
import { goalBrowsers } from '../fixtures'
import { expect } from 'chai'
import { utils } from '../../lib/utils'
import sinon, { SinonStub } from 'sinon'
const os = require('os')
import { log } from '../log'
import { project } from 'ramda'
const isWindows = () => {
return os.platform() === 'win32'
}
describe('browser detection', () => {
// making simple to debug tests
// using DEBUG=... flag
const checkBrowsers = (browsers) => {
log('detected browsers %j', browsers)
expect(browsers).to.be.an('array')
const mainProps = project(['name', 'version'], browsers)
log('%d browsers\n%j', browsers.length, mainProps)
if (isWindows()) {
// we might not find any browsers on Windows CI
expect(browsers.length).to.be.gte(0)
} else {
expect(browsers.length).to.be.gt(0)
}
}
// we are only going to run tests on platforms with at least
// one browser. This test, is really E2E because it finds
// real browsers
it('detects available browsers', () => {
return detect().then(checkBrowsers)
})
context('#setMajorVersion', () => {
const foundBrowser = {
name: 'test browser',
version: '11.22.33',
}
const res = setMajorVersion(foundBrowser)
// @ts-ignore
expect(res.majorVersion, 'major version was converted to number').to.equal(11)
})
context('#detectByPath', () => {
let execa: SinonStub
beforeEach(() => {
execa = sinon.stub(utils, 'getOutput')
execa.withArgs('/Applications/My Shiny New Browser.app', ['--version'])
.resolves({ stdout: 'foo-browser v100.1.2.3' })
execa.withArgs('/foo/bar/browser', ['--version'])
.resolves({ stdout: 'foo-browser v9001.1.2.3' })
execa.withArgs('/not/a/browser', ['--version'])
.resolves({ stdout: 'not a browser version string' })
execa.withArgs('/not/a/real/path', ['--version'])
.rejects()
})
it('detects by path', () => {
// @ts-ignore
return detectByPath('/foo/bar/browser', goalBrowsers)
.then((browser) => {
expect(browser).to.deep.equal(
Object.assign({}, goalBrowsers.find((gb) => {
return gb.name === 'foo-browser'
}), {
displayName: 'Custom Foo Browser',
info: 'Loaded from /foo/bar/browser',
custom: true,
version: '9001.1.2.3',
majorVersion: 9001,
path: '/foo/bar/browser',
}),
)
})
})
it('rejects when there was no matching versionRegex', () => {
// @ts-ignore
return detectByPath('/not/a/browser', goalBrowsers)
.then(() => {
throw Error('Should not find a browser')
})
.catch((err) => {
expect(err.notDetectedAtPath).to.be.true
})
})
it('rejects when there was an error executing the command', () => {
// @ts-ignore
return detectByPath('/not/a/real/path', goalBrowsers)
.then(() => {
throw Error('Should not find a browser')
})
.catch((err) => {
expect(err.notDetectedAtPath).to.be.true
})
})
it('works with spaces in the path', () => {
// @ts-ignore
return detectByPath('/Applications/My Shiny New Browser.app', goalBrowsers)
.then((browser) => {
expect(browser).to.deep.equal(
Object.assign({}, goalBrowsers.find((gb) => {
return gb.name === 'foo-browser'
}), {
displayName: 'Custom Foo Browser',
info: 'Loaded from /Applications/My Shiny New Browser.app',
custom: true,
version: '100.1.2.3',
majorVersion: 100,
path: '/Applications/My Shiny New Browser.app',
}),
)
})
})
// @see https://github.com/cypress-io/cypress/issues/8241
it('adds warnings to Firefox versions less than 80', async () => {
execa.withArgs('/good-firefox', ['--version'])
.resolves({ stdout: 'Mozilla Firefox 80.0' })
execa.withArgs('/bad-firefox', ['--version'])
.resolves({ stdout: 'Mozilla Firefox 79.1' })
expect(await detectByPath('/good-firefox')).to.not.have.property('warning')
expect(await detectByPath('/bad-firefox')).to.include({
warning: firefoxGcWarning,
})
})
})
})