forked from webpack/webpack-cli
/
test-utils.test.js
139 lines (121 loc) · 5.13 KB
/
test-utils.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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
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
'use strict';
const { appendDataIfFileExists, copyFile, run, runAndGetWatchProc } = require('./test-utils');
const { writeFileSync, unlinkSync, readFileSync, existsSync } = require('fs');
const { resolve } = require('path');
describe('appendFile', () => {
describe('positive test-cases', () => {
const junkFile = 'junkFile.js';
const junkFilePath = resolve(__dirname, junkFile);
const initialJunkData = 'initial junk data';
const junkComment = '//junk comment';
beforeEach(() => {
writeFileSync(junkFilePath, initialJunkData);
});
afterEach(() => {
unlinkSync(junkFilePath);
});
it('should append data to file if file exists', () => {
appendDataIfFileExists(__dirname, junkFile, junkComment);
const actualData = readFileSync(junkFilePath).toString();
expect(actualData).toBe(initialJunkData + junkComment);
});
});
describe('negative test-cases', () => {
it('should throw error if file does not exist', () => {
expect(() => appendDataIfFileExists(__dirname, 'does-not-exist.js', 'junk data')).toThrowError();
});
});
});
describe('copyFile', () => {
describe('positive test-cases', () => {
const originalFile = 'junkFile.js';
const originalFilePath = resolve(__dirname, originalFile);
const originalFileData = 'initial junk data';
let copyFilePath;
beforeEach(() => {
writeFileSync(originalFilePath, originalFileData);
});
afterEach(() => {
unlinkSync(originalFilePath);
if (existsSync(copyFilePath)) {
unlinkSync(copyFilePath);
}
});
it('should copy file if file exists', () => {
copyFilePath = copyFile(__dirname, originalFile);
const actualData = readFileSync(copyFilePath).toString();
expect(actualData).toBe(originalFileData);
});
});
describe('negative test-cases', () => {
it('should throw error if file does not exist', () => {
expect(() => copyFile(__dirname, 'does-not-exist.js')).toThrowError();
});
});
});
describe('run function', () => {
it('should work correctly by default', () => {
const { command, stdout, stderr } = run(__dirname);
// Executes the correct command
expect(command).toContain('cli.js');
// Should use apply a default output dir
expect(command).toContain('--output-path');
expect(command).toContain('bin');
expect(stdout).toBeTruthy();
expect(stderr).toBeFalsy();
});
it('executes cli with passed commands and params', () => {
const { stdout, stderr, command } = run(__dirname, ['info', '--output', 'markdown'], false);
// execution command contains info command
expect(command).toContain('info');
expect(command).toContain('--output markdown');
// Contains info command output
expect(stdout).toContain('System:');
expect(stdout).toContain('Node');
expect(stdout).toContain('npm');
expect(stdout).toContain('Yarn');
expect(stderr).toBeFalsy();
});
it('uses default output when output param is false', () => {
const { stdout, stderr, command } = run(__dirname, [], false);
// execution command contains info command
expect(command).not.toContain('--output-path');
expect(stdout).toBeTruthy();
expect(stderr).toBeFalsy();
});
});
describe('runAndGetWatchProc function', () => {
it('should work correctly by default', async () => {
const { command, stdout, stderr } = await runAndGetWatchProc(__dirname);
// Executes the correct command
expect(command).toContain('cli.js');
// Should use apply a default output dir
expect(command).toContain('--output-path');
expect(command).toContain('bin');
expect(stdout).toBeTruthy();
expect(stderr).toBeFalsy();
});
it('executes cli with passed commands and params', async () => {
const { stdout, stderr, command } = await runAndGetWatchProc(__dirname, ['info', '--output', 'markdown'], false);
// execution command contains info command
expect(command).toContain('info');
expect(command).toContain('--output markdown');
// Contains info command output
expect(stdout).toContain('System:');
expect(stdout).toContain('Node');
expect(stdout).toContain('npm');
expect(stdout).toContain('Yarn');
expect(stderr).toBeFalsy();
});
it('uses default output when output param is false', async () => {
const { stdout, stderr, command } = await runAndGetWatchProc(__dirname, [], false);
// execution command contains info command
expect(command).not.toContain('--output-path');
expect(stdout).toBeTruthy();
expect(stderr).toBeFalsy();
});
it('writes to stdin', async () => {
const { stdout } = await runAndGetWatchProc(__dirname, ['init'], false, 'n');
expect(stdout).toContain('Which will be your application entry point?');
});
});