UNPKG

create-broadcast-app

Version:

Create a NextGen TV broadcast app with one command

104 lines (91 loc) 2.71 kB
'use strict'; 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) { 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'); } 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')); 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('npm', ['install'], { cwd: this.testDirectory, }); if (!shouldInstallScripts) { await fs.ensureSymlink( path.resolve( path.resolve( __dirname, '../../../..', 'packages', 'react-scripts', 'bin', 'react-scripts.js' ) ), path.join(this.testDirectory, 'node_modules', '.bin', 'react-scripts') ); await execa('npm', ['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; } } };