diff --git a/packages/cli/src/services/__tests__/output.test.ts b/packages/cli/src/services/__tests__/output.test.ts index ead9c63b6..94c3d6452 100644 --- a/packages/cli/src/services/__tests__/output.test.ts +++ b/packages/cli/src/services/__tests__/output.test.ts @@ -53,8 +53,17 @@ describe('Output service', () => { it('given , print output to console', async () => { const output = '{}'; + const writeMock = jest.spyOn(process.stdout, 'write').mockImplementation((chunk: any, callback?: any) => { + if (typeof callback === 'function') { + callback(); + } + return true; + }); + expect(await writeOutput(output, '')).toBeUndefined(); - expect(process.stdout.write).toBeCalledWith(output); + expect(writeMock).toHaveBeenCalledWith(output, expect.any(Function)); + + writeMock.mockRestore(); }); }); }); diff --git a/packages/cli/src/services/output.ts b/packages/cli/src/services/output.ts index 23015090a..42a7450da 100644 --- a/packages/cli/src/services/output.ts +++ b/packages/cli/src/services/output.ts @@ -49,6 +49,13 @@ export async function writeOutput(outputStr: string, outputFile: string): Promis if (outputFile !== '') { await fs.writeFile(outputFile, outputStr); } else { - process.stdout.write(outputStr); + // Handle backpressure by using the callback parameter + // The callback is invoked when the data is flushed (or an error occurs) + return new Promise((resolve, reject) => { + process.stdout.write(outputStr, err => { + if (err) reject(err); + else resolve(); + }); + }); } }