index.test.js 4.81 KB
Newer Older
1
2
3
4
5
const {
  bootstrap,
  getOutputDevelopment,
  getOutputProduction,
} = require('../../utils');
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
const fs = require('fs-extra');
const path = require('path');
const Semaphore = require('async-sema');
const tempy = require('tempy');

describe('webpack message formatting', () => {
  const semaphore = new Semaphore(1, { capacity: Infinity });
  let testDirectory;
  beforeAll(async () => {
    testDirectory = tempy.directory();
    await bootstrap({ directory: testDirectory, template: __dirname });
  });
  beforeEach(async () => {
    await semaphore.acquire();
  });
  afterEach(async () => {
    fs.removeSync(path.join(testDirectory, 'src', 'App.js'));
    semaphore.release();
  });

26
  it('formats babel syntax error', async () => {
27
28
29
30
31
32
33
34
35
    fs.copySync(
      path.join(__dirname, 'src', 'AppBabel.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    expect(response).toMatchSnapshot();
  });

36
  it('formats css syntax error', async () => {
37
38
39
40
41
42
43
44
45
    fs.copySync(
      path.join(__dirname, 'src', 'AppCss.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    expect(response).toMatchSnapshot();
  });

46
  it('formats unknown export', async () => {
47
48
49
50
51
52
53
54
55
    fs.copySync(
      path.join(__dirname, 'src', 'AppUnknownExport.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    expect(response).toMatchSnapshot();
  });

56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  it('formats aliased unknown export', async () => {
    fs.copySync(
      path.join(__dirname, 'src', 'AppAliasUnknownExport.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    expect(response).toMatchSnapshot();
  });

  it('formats no default export', async () => {
    fs.copySync(
      path.join(__dirname, 'src', 'AppNoDefault.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    expect(response).toMatchSnapshot();
  });

  it('formats missing package', async () => {
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
    fs.copySync(
      path.join(__dirname, 'src', 'AppMissingPackage.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    expect(response).toMatchSnapshot();
  });

  it('formats eslint warning', async () => {
    fs.copySync(
      path.join(__dirname, 'src', 'AppLintWarning.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    const sizeIndex = response.stdout.indexOf('File sizes after gzip');
    if (sizeIndex !== -1) {
      response.stdout = response.stdout.substring(0, sizeIndex);
    }
    expect(response).toMatchSnapshot();
  });

  it('formats eslint error', async () => {
    fs.copySync(
      path.join(__dirname, 'src', 'AppLintError.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    expect(response).toMatchSnapshot();
  });
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156

  it('helps when users tries to use sass', async () => {
    fs.copySync(
      path.join(__dirname, 'src', 'AppSass.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    expect(response).toMatchSnapshot();
  });

  it('formats file not found error', async () => {
    fs.copySync(
      path.join(__dirname, 'src', 'AppUnknownFile.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    expect(response).toMatchSnapshot();
  });

  it('formats case sensitive path error', async () => {
    fs.copySync(
      path.join(__dirname, 'src', 'AppIncorrectCase.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputDevelopment({ directory: testDirectory });
    if (process.platform === 'darwin') {
      expect(response.stderr).toMatch(
        `Cannot find file: 'export5.js' does not match the corresponding name on disk: './src/Export5.js'.`
      );
    } else {
      expect(response.stderr).not.toEqual(''); // TODO: figure out how we can test this on Linux/Windows
      // I believe getting this working requires we tap into enhanced-resolve
      // pipeline, which is debt we don't want to take on right now.
    }
  });

  it('formats out of scope error', async () => {
    fs.copySync(
      path.join(__dirname, 'src', 'AppOutOfScopeImport.js'),
      path.join(testDirectory, 'src', 'App.js')
    );

    const response = await getOutputProduction({ directory: testDirectory });
    expect(response).toMatchSnapshot();
  });
157
});