1 | import { exec } from 'child-process-promise'
|
2 | import renderer from 'react-test-renderer'
|
3 | import React from 'react'
|
4 | import { copy, readFile } from 'fs-extra'
|
5 | import puppeteer from 'puppeteer'
|
6 | import getPort from 'get-port'
|
7 | import Server from 'static-server'
|
8 | import { join } from 'path'
|
9 | import { version } from '../package.json'
|
10 |
|
11 | jest.setTimeout(60 * 1000)
|
12 |
|
13 | describe(`CLI help`, () => {
|
14 | it(`Should return something`, async () => {
|
15 | let res = await exec(`babel-node dist version`)
|
16 | expect(res.stdout).toEqual(`${version}\n`)
|
17 | expect(res.stderr).toEqual(``)
|
18 | })
|
19 | })
|
20 | describe(`Build`, () => {
|
21 | beforeAll(async () => {
|
22 | let res = await exec(`babel-node dist build --src src-test --dist dist-test`)
|
23 | expect(res.stderr).toEqual(``)
|
24 | })
|
25 | it(`Should build a valid React component`, async () => {
|
26 | let TestComponent = await import('../dist-test/component')
|
27 | TestComponent = TestComponent.default
|
28 | let component = renderer.create(
|
29 | <TestComponent />
|
30 | )
|
31 | let tree = component.toJSON()
|
32 | expect(tree).toMatchSnapshot()
|
33 | })
|
34 | it(`Should build a valid JavaScript module`, async () => {
|
35 | let TestModule = await import('../dist-test/module')
|
36 | TestModule = TestModule.default
|
37 | expect(TestModule()).toEqual(19)
|
38 | })
|
39 | it(`Should exit on error`, async () => {
|
40 | let res = await exec(`babel-node dist build --src asdf --dist dist-asdf`)
|
41 | expect(res.stderr).toBeTruthy()
|
42 | })
|
43 | afterAll(async () => {
|
44 | await exec(`rm -rf dist-test`)
|
45 | })
|
46 | })
|
47 | describe(`Bundle`, () => {
|
48 | let server
|
49 | let browser
|
50 | beforeAll(async () => {
|
51 | server = new Server({
|
52 | rootPath: `dist-bundle-test`,
|
53 | port: await getPort(),
|
54 | })
|
55 | server.start()
|
56 | browser = await puppeteer.launch({ args: ['--no-sandbox'] })
|
57 | let res = await exec(`babel-node dist bundle --src src-test/index.html --dist dist-bundle-test`)
|
58 | expect(res.stderr).toEqual(``)
|
59 | })
|
60 | it(`Should build a valid React component`, async () => {
|
61 | let page = await browser.newPage()
|
62 | await page.goto(`http://localhost:${server.port}`)
|
63 | await page.waitForSelector(`.test`)
|
64 | const content = await page.$eval(`.test`, e => e.textContent)
|
65 | expect(content).toEqual(`Testing.`)
|
66 |
|
67 | })
|
68 | it(`Should exit on error`, async () => {
|
69 | let res = await exec(`babel-node dist bundle --src src-asdf/index.html --dist dist-asdf`)
|
70 | expect(res.stderr).toBeTruthy()
|
71 | })
|
72 | afterAll(async () => {
|
73 | server.stop()
|
74 | await Promise.all([
|
75 | browser.close(),
|
76 | exec(`rm -rf dist-bundle-test`),
|
77 | exec(`rm -rf dist-asdf`),
|
78 | ])
|
79 | })
|
80 | })
|
81 | describe(`Rename`, () => {
|
82 | beforeAll(async () => {
|
83 | await Promise.all([
|
84 | copy(`./package.json`, `./dist-test/package.json`),
|
85 | copy(`./src-test/serverless.yml`, `./dist-test/serverless.yml`),
|
86 | ])
|
87 | let res = await exec(`cd dist-test && babel-node ../dist rename`)
|
88 | expect(res.stderr).toEqual(``)
|
89 | })
|
90 | it(`Should rename a package.json file`, async () => {
|
91 | let pkg = await import(`../dist-test/package.json`)
|
92 | expect(pkg.name).toEqual(`dist-test`)
|
93 | })
|
94 | it(`Should rename a serverless.yml file`, async () => {
|
95 | let config = await readFile(`./dist-test/serverless.yml`)
|
96 | config = config.toString()
|
97 | config = config.split(`\n`)
|
98 | expect(config[0]).toEqual(`service: dist-test`)
|
99 | })
|
100 | afterAll(async () => {
|
101 | await exec(`rm -rf dist-test`)
|
102 | })
|
103 | })
|
104 | describe(`Run`, () => {
|
105 | it(`Should run a file with ES6`, async () => {
|
106 | let res = await exec(`babel-node dist run --file src-test/run.js`)
|
107 | expect(res.stderr).toEqual(``)
|
108 | res = res.stdout.trim()
|
109 | res = res.split(`\n`)
|
110 | res = res.pop()
|
111 | expect(res).toEqual(`19`)
|
112 | })
|
113 | it(`Should exit on error`, async () => {
|
114 | let res = await exec(`babel-node dist run --file src-asdf/run.js`)
|
115 | expect(res.stderr).toBeTruthy()
|
116 | })
|
117 | afterAll(async () => {
|
118 | await exec(`rm -rf dist-test`)
|
119 | })
|
120 | })
|