mirror of
https://github.com/usebruno/bruno.git
synced 2026-07-07 22:18:33 +00:00
Mark test script errors as failed in runner (#6261)
* Mark test script errors as failed in runner
and CLI
* Unify handling of post-response and pre-request script errors in both CLI and Electron
* feat: Enhance error handling in script execution by preserving partial results for pre-request and post-response scripts across CLI and Electron. This ensures that tests passing before an error are still reported.
* Preserving stopExecution in test script error handler
---------
Co-authored-by: Pragadesh-45 <temporaryg7904@gmail.com>
This commit is contained in:
@@ -206,55 +206,80 @@ const runSingleRequest = async function (
|
||||
const collectionName = collection?.brunoConfig?.name;
|
||||
if (requestScriptFile?.length) {
|
||||
const scriptRuntime = new ScriptRuntime({ runtime: scriptingConfig?.runtime });
|
||||
const result = await scriptRuntime.runRequestScript(
|
||||
decomment(requestScriptFile),
|
||||
request,
|
||||
envVariables,
|
||||
runtimeVariables,
|
||||
collectionPath,
|
||||
onConsoleLog,
|
||||
processEnvVars,
|
||||
scriptingConfig,
|
||||
runSingleRequestByPathname,
|
||||
collectionName
|
||||
);
|
||||
if (result?.nextRequestName !== undefined) {
|
||||
nextRequestName = result.nextRequestName;
|
||||
}
|
||||
try {
|
||||
const result = await scriptRuntime.runRequestScript(decomment(requestScriptFile),
|
||||
request,
|
||||
envVariables,
|
||||
runtimeVariables,
|
||||
collectionPath,
|
||||
onConsoleLog,
|
||||
processEnvVars,
|
||||
scriptingConfig,
|
||||
runSingleRequestByPathname,
|
||||
collectionName);
|
||||
if (result?.nextRequestName !== undefined) {
|
||||
nextRequestName = result.nextRequestName;
|
||||
}
|
||||
|
||||
if (result?.stopExecution) {
|
||||
shouldStopRunnerExecution = true;
|
||||
}
|
||||
if (result?.stopExecution) {
|
||||
shouldStopRunnerExecution = true;
|
||||
}
|
||||
|
||||
if (result?.skipRequest) {
|
||||
return {
|
||||
test: {
|
||||
filename: relativeItemPathname
|
||||
},
|
||||
request: {
|
||||
method: request.method,
|
||||
url: request.url,
|
||||
headers: request.headers,
|
||||
data: request.data
|
||||
},
|
||||
response: {
|
||||
if (result?.skipRequest) {
|
||||
return {
|
||||
test: {
|
||||
filename: relativeItemPathname
|
||||
},
|
||||
request: {
|
||||
method: request.method,
|
||||
url: request.url,
|
||||
headers: request.headers,
|
||||
data: request.data
|
||||
},
|
||||
response: {
|
||||
status: 'skipped',
|
||||
statusText: 'request skipped via pre-request script',
|
||||
data: null,
|
||||
responseTime: 0
|
||||
},
|
||||
error: null,
|
||||
status: 'skipped',
|
||||
statusText: 'request skipped via pre-request script',
|
||||
data: null,
|
||||
responseTime: 0
|
||||
},
|
||||
error: null,
|
||||
status: 'skipped',
|
||||
skipped: true,
|
||||
assertionResults: [],
|
||||
testResults: [],
|
||||
preRequestTestResults: result?.results || [],
|
||||
postResponseTestResults: [],
|
||||
shouldStopRunnerExecution
|
||||
};
|
||||
}
|
||||
skipped: true,
|
||||
assertionResults: [],
|
||||
testResults: [],
|
||||
preRequestTestResults: result?.results || [],
|
||||
postResponseTestResults: [],
|
||||
shouldStopRunnerExecution
|
||||
};
|
||||
}
|
||||
|
||||
preRequestTestResults = result?.results || [];
|
||||
preRequestTestResults = result?.results || [];
|
||||
} catch (error) {
|
||||
console.error('Pre-request script execution error:', error);
|
||||
|
||||
// Extract partial results from the error (tests that passed before the error)
|
||||
const partialResults = error?.partialResults?.results || [];
|
||||
preRequestTestResults = [
|
||||
...partialResults,
|
||||
{
|
||||
status: 'fail',
|
||||
description: 'Pre-Request Script Error',
|
||||
error: error.message || 'An error occurred while executing the pre-request script.'
|
||||
}
|
||||
];
|
||||
|
||||
// Preserve nextRequestName if it was set before the error
|
||||
if (error?.partialResults?.nextRequestName !== undefined) {
|
||||
nextRequestName = error.partialResults.nextRequestName;
|
||||
}
|
||||
|
||||
// Preserve stopExecution if it was set before the error
|
||||
if (error?.partialResults?.stopExecution) {
|
||||
shouldStopRunnerExecution = true;
|
||||
}
|
||||
|
||||
logResults(preRequestTestResults, 'Pre-Request Tests');
|
||||
}
|
||||
}
|
||||
|
||||
// interpolate variables inside request
|
||||
@@ -732,6 +757,26 @@ const runSingleRequest = async function (
|
||||
logResults(postResponseTestResults, 'Post-Response Tests');
|
||||
} catch (error) {
|
||||
console.error('Post-response script execution error:', error);
|
||||
|
||||
const partialResults = error?.partialResults?.results || [];
|
||||
postResponseTestResults = [
|
||||
...partialResults,
|
||||
{
|
||||
status: 'fail',
|
||||
description: 'Post-Response Script Error',
|
||||
error: error.message || 'An error occurred while executing the post-response script.'
|
||||
}
|
||||
];
|
||||
|
||||
if (error?.partialResults?.nextRequestName !== undefined) {
|
||||
nextRequestName = error.partialResults.nextRequestName;
|
||||
}
|
||||
|
||||
if (error?.partialResults?.stopExecution) {
|
||||
shouldStopRunnerExecution = true;
|
||||
}
|
||||
|
||||
logResults(postResponseTestResults, 'Post-Response Tests');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -781,6 +826,26 @@ const runSingleRequest = async function (
|
||||
logResults(testResults, 'Tests');
|
||||
} catch (error) {
|
||||
console.error('Test script execution error:', error);
|
||||
|
||||
const partialResults = error?.partialResults?.results || [];
|
||||
testResults = [
|
||||
...partialResults,
|
||||
{
|
||||
status: 'fail',
|
||||
description: 'Test Script Error',
|
||||
error: error.message || 'An error occurred while executing the test script.'
|
||||
}
|
||||
];
|
||||
|
||||
if (error?.partialResults?.nextRequestName !== undefined) {
|
||||
nextRequestName = error.partialResults.nextRequestName;
|
||||
}
|
||||
|
||||
if (error?.partialResults?.stopExecution) {
|
||||
shouldStopRunnerExecution = true;
|
||||
}
|
||||
|
||||
logResults(testResults, 'Tests');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user