Skip to content

Commit

Permalink
Merge pull request #55 from technote-space/release/v0.0.19
Browse files Browse the repository at this point in the history
Release/v0.0.19
  • Loading branch information
technote-space authored Nov 10, 2019
2 parents c9c76ce + c2b02e2 commit c3139b4
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 28 deletions.
31 changes: 31 additions & 0 deletions __tests__/utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,37 @@ describe('testChildProcess, setChildProcessParams', () => {
expect(global.mockChildProcess.stderr).toBe('');
expect(global.mockChildProcess.error).toBe(null);
});

it('should set mock params function', () => {
const spy = spyOnExec();
const callback = jest.fn();
expect(global.mockChildProcess.stdout).toBe('stdout');
expect(global.mockChildProcess.stderr).toBe('');
expect(global.mockChildProcess.error).toBe(null);

setChildProcessParams({
stdout: (command: string): string => command === 'test1' ? 'stdout1' : 'stdout2',
stderr: (command: string): string => command === 'test1' ? 'stderr1' : 'stderr2',
error: (command: string): Error => command === 'test1' ? new Error('err1') : new Error('err2'),
});

exec('test1', callback);
exec('test2', callback);

execCalledWith(spy, [
'test1',
'test2',
]);
expect(callback).toBeCalledTimes(2);
expect(callback.mock.calls[0]).toHaveLength(3);
expect(callback.mock.calls[0][0]).toEqual(new Error('err1'));
expect(callback.mock.calls[0][1]).toBe('stdout1');
expect(callback.mock.calls[0][2]).toBe('stderr1');
expect(callback.mock.calls[1]).toHaveLength(3);
expect(callback.mock.calls[1][0]).toEqual(new Error('err2'));
expect(callback.mock.calls[1][1]).toBe('stdout2');
expect(callback.mock.calls[1][2]).toBe('stderr2');
});
});

describe('testFs', () => {
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@technote-space/github-action-test-helper",
"version": "0.0.18",
"version": "0.0.19",
"description": "Test helper for GitHub Action.",
"author": "Technote <[email protected]> (https://technote.space)",
"license": "MIT",
Expand All @@ -26,7 +26,7 @@
},
"devDependencies": {
"@types/jest": "^24.0.22",
"@types/node": "^12.12.6",
"@types/node": "^12.12.7",
"@typescript-eslint/eslint-plugin": "^2.6.1",
"@typescript-eslint/parser": "^2.6.1",
"eslint": "^6.6.0",
Expand Down
16 changes: 10 additions & 6 deletions src/global.setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { EOL } from 'os';
import global from './global';

export const setupGlobal = (): void => {
global.mockStdout = {
global.mockStdout = {
write: jest.fn(),
};
process.stdout.write = global.mockStdout.write;
Expand All @@ -12,10 +12,10 @@ export const setupGlobal = (): void => {
type converterType = (value: any) => boolean;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const converter = (prefix = ''): converterType => (value: any): boolean => process.stdout.write(prefix + JSON.stringify(value, null, '\t') + EOL);
console.log = jest.fn(converter());
console.info = jest.fn(converter('__info__'));
console.error = jest.fn(converter('__error__'));
console.warn = jest.fn(converter('__warning__'));
console.log = jest.fn(converter());
console.info = jest.fn(converter('__info__'));
console.error = jest.fn(converter('__error__'));
console.warn = jest.fn(converter('__warning__'));

global.mockChildProcess = {
stdout: 'stdout',
Expand All @@ -24,7 +24,11 @@ export const setupGlobal = (): void => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
exec: jest.fn((...args: any[]) => {
const callback = args.length === 2 ? args[1] : args[2];
callback(global.mockChildProcess.error, global.mockChildProcess.stdout, global.mockChildProcess.stderr);
callback(
typeof global.mockChildProcess.error === 'function' ? global.mockChildProcess.error(args[0]) : global.mockChildProcess.error,
typeof global.mockChildProcess.stdout === 'function' ? global.mockChildProcess.stdout(args[0]) : global.mockChildProcess.stdout,
typeof global.mockChildProcess.stderr === 'function' ? global.mockChildProcess.stderr(args[0]) : global.mockChildProcess.stderr,
);
}),
};
jest.mock('child_process', () => ({
Expand Down
6 changes: 3 additions & 3 deletions src/global.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ interface Global extends NodeJS.Global {
};
mockChildProcess: {
exec: jest.Mock;
stdout: string;
stderr: string;
error: ExecException | null;
stdout: string | ((command: string) => string);
stderr: string | ((command: string) => string);
error: ExecException | null | ((command: string) => ExecException);
};
}

Expand Down
8 changes: 4 additions & 4 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ export const testChildProcess = (): void => {
});
};

export const setChildProcessParams = (params: { stdout?: string; stderr?: string; error?: Error }): void => {
if (typeof params.stdout === 'string') {
export const setChildProcessParams = (params: { stdout?: string | ((command: string) => string); stderr?: string | ((command: string) => string); error?: Error | ((command: string) => Error) }): void => {
if (typeof params.stdout === 'string' || typeof params.stdout === 'function') {
global.mockChildProcess.stdout = params.stdout;
}
if (typeof params.stderr === 'string') {
if (typeof params.stderr === 'string' || typeof params.stderr === 'function') {
global.mockChildProcess.stderr = params.stderr;
}
if (params.error instanceof Error) {
if (params.error instanceof Error || typeof params.error === 'function') {
global.mockChildProcess.error = params.error;
}
};
Expand Down
26 changes: 13 additions & 13 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,9 @@
js-tokens "^4.0.0"

"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.7.2":
version "7.7.2"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.2.tgz#ea8334dc77416bfd9473eb470fd00d8245b3943b"
integrity sha512-DDaR5e0g4ZTb9aP7cpSZLkACEBdoLGwJDWgHtBhrGX7Q1RjhdoMOfexICj5cqTAtpowjGQWfcvfnQG7G2kAB5w==
version "7.7.3"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.3.tgz#5fad457c2529de476a248f75b0f090b3060af043"
integrity sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==

"@babel/plugin-syntax-object-rest-spread@^7.0.0":
version "7.2.0"
Expand Down Expand Up @@ -434,10 +434,10 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==

"@types/node@>= 8", "@types/node@^12.12.6":
version "12.12.6"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.6.tgz#a47240c10d86a9a57bb0c633f0b2e0aea9ce9253"
integrity sha512-FjsYUPzEJdGXjwKqSpE0/9QEh6kzhTAeObA54rn6j3rR4C/mzpI9L0KNfoeASSPMMdxIsoJuCLDWcM/rVjIsSA==
"@types/node@>= 8", "@types/node@^12.12.7":
version "12.12.7"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.7.tgz#01e4ea724d9e3bd50d90c11fd5980ba317d8fa11"
integrity sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w==

"@types/stack-utils@^1.0.1":
version "1.0.1"
Expand Down Expand Up @@ -1191,9 +1191,9 @@ es-abstract@^1.5.1:
string.prototype.trimright "^2.1.0"

es-to-primitive@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
version "1.2.1"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
dependencies:
is-callable "^1.1.4"
is-date-object "^1.0.1"
Expand Down Expand Up @@ -1323,9 +1323,9 @@ esutils@^2.0.2:
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==

exec-sh@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b"
integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==
version "0.3.4"
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==

execa@^1.0.0:
version "1.0.0"
Expand Down

0 comments on commit c3139b4

Please sign in to comment.