An error occurred while loading the file. Please try again.
-
Ian Schmitz authoredUnverified7b196fa4
const execa = require('execa');
const fs = require('fs-extra');
const path = require('path');
const tempy = require('tempy');
const ReactScripts = require('./scripts');
module.exports = class TestSetup {
constructor(fixtureName, templateDirectory, { pnp = true } = {}) {
this.fixtureName = fixtureName;
this.templateDirectory = templateDirectory;
this.testDirectory = null;
this._scripts = null;
this.setup = this.setup.bind(this);
this.teardown = this.teardown.bind(this);
this.isLocal = !(process.env.CI && process.env.CI !== 'false');
this.settings = { pnp: pnp && !this.isLocal };
}
async setup() {
await this.teardown();
this.testDirectory = tempy.directory();
await fs.copy(
path.resolve(__dirname, '..', 'template'),
this.testDirectory
);
await fs.copy(this.templateDirectory, this.testDirectory);
await fs.remove(path.resolve(this.testDirectory, 'test.partial.js'));
await fs.remove(path.resolve(this.testDirectory, '.disable-pnp'));
const packageJson = await fs.readJson(
path.resolve(this.testDirectory, 'package.json')
);
const shouldInstallScripts = !this.isLocal;
if (shouldInstallScripts) {
packageJson.dependencies = Object.assign({}, packageJson.dependencies, {
'react-scripts': 'latest',
});
}
packageJson.scripts = Object.assign({}, packageJson.scripts, {
start: 'react-scripts start',
build: 'react-scripts build',
test: 'react-scripts test',
});
packageJson.license = packageJson.license || 'UNLICENSED';
await fs.writeJson(
path.resolve(this.testDirectory, 'package.json'),
packageJson
);
await execa(
'yarnpkg',
[
'install',
this.settings.pnp ? '--enable-pnp' : null,
'--mutex',
'network',
].filter(Boolean),
{
cwd: this.testDirectory,
}
);
if (!shouldInstallScripts) {
await fs.ensureSymlink(
path.resolve(
path.resolve(
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
__dirname,
'../../../..',
'packages',
'react-scripts',
'bin',
'react-scripts.js'
)
),
path.join(this.testDirectory, 'node_modules', '.bin', 'react-scripts')
);
await execa('yarnpkg', ['link', 'react-scripts'], {
cwd: this.testDirectory,
});
}
}
get scripts() {
if (this.testDirectory == null) {
return null;
}
if (this._scripts == null) {
this._scripts = new ReactScripts(this.testDirectory);
}
return this._scripts;
}
async teardown() {
if (this.testDirectory != null) {
try {
await fs.remove(this.testDirectory);
} catch (ex) {
if (this.isLocal) {
throw ex;
} else {
// In CI, don't worry if the test directory was not able to be deleted
}
}
this.testDirectory = null;
this._scripts = null;
}
}
};