diff --git a/packages/block-serialization-spec-parser/shared-tests.js b/packages/block-serialization-spec-parser/shared-tests.js index e9b90337061ee..ca9fde49dc350 100644 --- a/packages/block-serialization-spec-parser/shared-tests.js +++ b/packages/block-serialization-spec-parser/shared-tests.js @@ -77,13 +77,25 @@ const makeTest = hasPHP ? ( ...args ) => describe( ...args ) : ( ...args ) => de export const phpTester = ( name, filename ) => makeTest( name, - 'test' === process.env.NODE_ENV ? jsTester( ( doc ) => JSON.parse( require( 'child_process' ).spawnSync( - 'php', - [ '-f', filename ], - { - input: doc, - encoding: 'utf8', - timeout: 30 * 1000, // abort after 30 seconds, that's too long anyway + 'test' === process.env.NODE_ENV ? jsTester( ( doc ) => { + const process = require( 'child_process' ).spawnSync( + 'php', + [ '-f', filename ], + { + input: doc, + encoding: 'utf8', + timeout: 30 * 1000, // abort after 30 seconds, that's too long anyway + } + ); + + if ( process.status !== 0 ) { + throw new Error( process.stderr || process.stdout ); + } + + try { + return JSON.parse( process.stdout ); + } catch ( e ) { + throw new Error( 'failed to parse JSON:\n' + process.stdout ); } - ).stdout ) ) : () => {} + } ) : () => {} );