test(js-sandbox): expand unsupported API coverage and sync error messages

Add comprehensive test coverage for unsupported Postman APIs and ensure
consistent error messages across pre-request and post-request contexts.

Test improvements:
- Expand coverage from 13 to 25 unsupported APIs (50 tests total)
- Add missing APIs: collectionVariables.set/unset/has/clear/toObject,
  vault.set/unset, iterationData.set/unset/has/toJSON
- Fix assertions to match actual error format with prefix
- Add pre-request context test for pm.execution.location

Implementation fixes:
- Add missing pm.iterationData.toJSON() in pre-request.js
- Sync post-request.js collectionVariables error messages to match
  pre-request.js ("use environment or request variables instead")
This commit is contained in:
jamesgeorge007 2025-11-12 13:53:10 +05:30
parent fc985771ea
commit 98f07f8a4c
6 changed files with 315 additions and 293 deletions

View file

@ -576,7 +576,7 @@
"params": [], "params": [],
"headers": [], "headers": [],
"preRequestScript": "export {};\n", "preRequestScript": "export {};\n",
"testScript": "export {};\n\npm.test('pm.require() throws descriptive error', () => {\n const throwFn = () => pm.require('lodash')\n pm.expect(throwFn).to.throw()\n pm.expect(throwFn).to.throw(/not supported in Hoppscotch/)\n})\n\npm.test('pm.execution.runRequest() throws descriptive error', () => {\n const throwFn = () => pm.execution.runRequest()\n pm.expect(throwFn).to.throw()\n pm.expect(throwFn).to.throw(/Collection Runner feature/)\n})\n\npm.test('pm.collectionVariables.replaceIn() throws descriptive error', () => {\n const throwFn = () => pm.collectionVariables.replaceIn('{{test}}')\n pm.expect(throwFn).to.throw()\n pm.expect(throwFn).to.throw(/Workspace feature/)\n})\n\npm.test('pm.iterationData.toJSON() throws descriptive error', () => {\n const throwFn = () => pm.iterationData.toJSON()\n pm.expect(throwFn).to.throw()\n pm.expect(throwFn).to.throw(/Collection Runner feature/)\n})\n", "testScript": "export {};\n\nconst unsupportedApis = [\n { api: 'pm.info.iteration', script: () => { const x = pm.info.iteration }, errorMessage: /Collection Runner feature/ },\n { api: 'pm.info.iterationCount', script: () => { const x = pm.info.iterationCount }, errorMessage: /Collection Runner feature/ },\n { api: 'pm.collectionVariables.get()', script: () => pm.collectionVariables.get('test'), errorMessage: /use environment or request variables instead/ },\n { api: 'pm.collectionVariables.set()', script: () => pm.collectionVariables.set('key', 'value'), errorMessage: /use environment or request variables instead/ },\n { api: 'pm.collectionVariables.unset()', script: () => pm.collectionVariables.unset('key'), errorMessage: /use environment or request variables instead/ },\n { api: 'pm.collectionVariables.has()', script: () => pm.collectionVariables.has('key'), errorMessage: /use environment or request variables instead/ },\n { api: 'pm.collectionVariables.clear()', script: () => pm.collectionVariables.clear(), errorMessage: /use environment or request variables instead/ },\n { api: 'pm.collectionVariables.toObject()', script: () => pm.collectionVariables.toObject(), errorMessage: /use environment or request variables instead/ },\n { api: 'pm.collectionVariables.replaceIn()', script: () => pm.collectionVariables.replaceIn('{{test}}'), errorMessage: /use environment or request variables instead/ },\n { api: 'pm.vault.get()', script: () => pm.vault.get('test'), errorMessage: /Postman Vault feature/ },\n { api: 'pm.vault.set()', script: () => pm.vault.set('key', 'value'), errorMessage: /Postman Vault feature/ },\n { api: 'pm.vault.unset()', script: () => pm.vault.unset('key'), errorMessage: /Postman Vault feature/ },\n { api: 'pm.iterationData.get()', script: () => pm.iterationData.get('test'), errorMessage: /Collection Runner feature/ },\n { api: 'pm.iterationData.set()', script: () => pm.iterationData.set('key', 'value'), errorMessage: /Collection Runner feature/ },\n { api: 'pm.iterationData.unset()', script: () => pm.iterationData.unset('key'), errorMessage: /Collection Runner feature/ },\n { api: 'pm.iterationData.has()', script: () => pm.iterationData.has('key'), errorMessage: /Collection Runner feature/ },\n { api: 'pm.iterationData.toObject()', script: () => pm.iterationData.toObject(), errorMessage: /Collection Runner feature/ },\n { api: 'pm.iterationData.toJSON()', script: () => pm.iterationData.toJSON(), errorMessage: /Collection Runner feature/ },\n { api: 'pm.execution.setNextRequest()', script: () => pm.execution.setNextRequest('next'), errorMessage: /Collection Runner feature/ },\n { api: 'pm.execution.skipRequest()', script: () => pm.execution.skipRequest(), errorMessage: /Collection Runner feature/ },\n { api: 'pm.execution.runRequest()', script: () => pm.execution.runRequest(), errorMessage: /Collection Runner feature/ },\n { api: 'pm.sendRequest()', script: () => pm.sendRequest('https://example.com', () => {}), errorMessage: /not yet implemented/ },\n { api: 'pm.visualizer.set()', script: () => pm.visualizer.set('<h1>Test</h1>'), errorMessage: /Postman Visualizer feature/ },\n { api: 'pm.visualizer.clear()', script: () => pm.visualizer.clear(), errorMessage: /Postman Visualizer feature/ },\n { api: 'pm.require()', script: () => pm.require('lodash'), errorMessage: /not supported in Hoppscotch/ },\n]\n\nunsupportedApis.forEach(({ api, script, errorMessage }) => {\n pm.test(`${api} throws descriptive error`, () => {\n pm.expect(script).to.throw(errorMessage)\n })\n})\n",
"auth": { "auth": {
"authType": "inherit", "authType": "inherit",
"authActive": true "authActive": true

View file

@ -816,7 +816,14 @@ declare namespace pm {
readonly iterationCount: never readonly iterationCount: never
}> }>
const sendRequest: () => never /**
* Send an HTTP request (unsupported)
* @throws Error - sendRequest is not supported in Hoppscotch
*/
function sendRequest(
request: string | { url: string; method?: string; [key: string]: any },
callback?: (err: any, response: any) => void
): never
/** /**
* Collection variables (unsupported - Workspace feature) * Collection variables (unsupported - Workspace feature)
@ -886,6 +893,13 @@ declare namespace pm {
* Execution control * Execution control
*/ */
const execution: Readonly<{ const execution: Readonly<{
/**
* Execution location identifier
* Always returns ["Hoppscotch"] with current = "Hoppscotch"
*/
readonly location: readonly string[] & {
readonly current: string
}
/** /**
* Set next request to execute (unsupported - Collection Runner feature) * Set next request to execute (unsupported - Collection Runner feature)
* @param requestNameOrId - Name or ID of the next request * @param requestNameOrId - Name or ID of the next request
@ -901,4 +915,12 @@ declare namespace pm {
*/ */
runRequest(requestNameOrId: string): never runRequest(requestNameOrId: string): never
}> }>
/**
* Import packages from Package Library (unsupported)
* @param packageName - Name of the package to import (e.g., '@team-domain/package-name' or 'npm:package-name@version')
* @returns The imported package module
* @throws Error - Package imports are not supported in Hoppscotch
*/
function require(packageName: string): never
} }

View file

@ -0,0 +1,73 @@
import { describe, expect, test } from "vitest"
import { runTest, runPreRequest } from "~/utils/test-helpers"
describe("pm.execution namespace", () => {
test("pm.execution.location returns Hoppscotch array in test script", () => {
return expect(
runTest(
`
pm.test("pm.execution.location is an array", () => {
pm.expect(Array.isArray(pm.execution.location)).to.be.true
})
pm.test("pm.execution.location contains Hoppscotch", () => {
pm.expect(pm.execution.location).to.include("Hoppscotch")
})
pm.test("pm.execution.location.current is Hoppscotch", () => {
pm.expect(pm.execution.location.current).to.equal("Hoppscotch")
})
`,
{
global: [],
selected: [],
}
)()
).resolves.toEqualRight([
expect.objectContaining({
children: [
expect.objectContaining({
descriptor: "pm.execution.location is an array",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
expect.objectContaining({
descriptor: "pm.execution.location contains Hoppscotch",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
expect.objectContaining({
descriptor: "pm.execution.location.current is Hoppscotch",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
],
}),
])
})
test("pm.execution.location is accessible in pre-request script", () => {
return expect(
runPreRequest(
`
// Verify pm.execution.location exists and has expected values
if (!Array.isArray(pm.execution.location)) {
throw new Error("pm.execution.location is not an array")
}
if (!pm.execution.location.includes("Hoppscotch")) {
throw new Error("pm.execution.location does not contain 'Hoppscotch'")
}
if (pm.execution.location.current !== "Hoppscotch") {
throw new Error("pm.execution.location.current is not 'Hoppscotch'")
}
`,
{
global: [],
selected: [],
}
)()
).resolves.toEqualRight(
expect.objectContaining({
global: [],
selected: [],
})
)
})
})

View file

@ -1,292 +1,182 @@
import { describe, expect, test } from "vitest" import { describe, expect, test } from "vitest"
import { runTest } from "~/utils/test-helpers" import { runTest, runPreRequest } from "~/utils/test-helpers"
// Unified test data for unsupported APIs
const unsupportedApis = [
{
api: "pm.info.iteration",
script: "const iteration = pm.info.iteration",
errorMessage:
"pm.info.iteration is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.info.iterationCount",
script: "const iterationCount = pm.info.iterationCount",
errorMessage:
"pm.info.iterationCount is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.collectionVariables.get()",
script: 'pm.collectionVariables.get("test")',
errorMessage:
"pm.collectionVariables.get() is not supported in Hoppscotch (use environment or request variables instead)",
},
{
api: "pm.collectionVariables.set()",
script: 'pm.collectionVariables.set("key", "value")',
errorMessage:
"pm.collectionVariables.set() is not supported in Hoppscotch (use environment or request variables instead)",
},
{
api: "pm.collectionVariables.unset()",
script: 'pm.collectionVariables.unset("key")',
errorMessage:
"pm.collectionVariables.unset() is not supported in Hoppscotch (use environment or request variables instead)",
},
{
api: "pm.collectionVariables.has()",
script: 'pm.collectionVariables.has("key")',
errorMessage:
"pm.collectionVariables.has() is not supported in Hoppscotch (use environment or request variables instead)",
},
{
api: "pm.collectionVariables.clear()",
script: "pm.collectionVariables.clear()",
errorMessage:
"pm.collectionVariables.clear() is not supported in Hoppscotch (use environment or request variables instead)",
},
{
api: "pm.collectionVariables.toObject()",
script: "pm.collectionVariables.toObject()",
errorMessage:
"pm.collectionVariables.toObject() is not supported in Hoppscotch (use environment or request variables instead)",
},
{
api: "pm.collectionVariables.replaceIn()",
script: 'pm.collectionVariables.replaceIn("{{var}}")',
errorMessage:
"pm.collectionVariables.replaceIn() is not supported in Hoppscotch (use environment or request variables instead)",
},
{
api: "pm.vault.get()",
script: 'pm.vault.get("test")',
errorMessage:
"pm.vault.get() is not supported in Hoppscotch (Postman Vault feature)",
},
{
api: "pm.vault.set()",
script: 'pm.vault.set("key", "value")',
errorMessage:
"pm.vault.set() is not supported in Hoppscotch (Postman Vault feature)",
},
{
api: "pm.vault.unset()",
script: 'pm.vault.unset("key")',
errorMessage:
"pm.vault.unset() is not supported in Hoppscotch (Postman Vault feature)",
},
{
api: "pm.iterationData.get()",
script: 'pm.iterationData.get("test")',
errorMessage:
"pm.iterationData.get() is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.iterationData.set()",
script: 'pm.iterationData.set("key", "value")',
errorMessage:
"pm.iterationData.set() is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.iterationData.unset()",
script: 'pm.iterationData.unset("key")',
errorMessage:
"pm.iterationData.unset() is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.iterationData.has()",
script: 'pm.iterationData.has("key")',
errorMessage:
"pm.iterationData.has() is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.iterationData.toObject()",
script: "pm.iterationData.toObject()",
errorMessage:
"pm.iterationData.toObject() is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.iterationData.toJSON()",
script: "pm.iterationData.toJSON()",
errorMessage:
"pm.iterationData.toJSON() is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.execution.setNextRequest()",
script: 'pm.execution.setNextRequest("next-request")',
errorMessage:
"pm.execution.setNextRequest() is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.execution.skipRequest()",
script: "pm.execution.skipRequest()",
errorMessage:
"pm.execution.skipRequest() is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.execution.runRequest()",
script: 'pm.execution.runRequest("request-id")',
errorMessage:
"pm.execution.runRequest() is not supported in Hoppscotch (Collection Runner feature)",
},
{
api: "pm.sendRequest()",
script: 'pm.sendRequest("https://example.com", () => {})',
errorMessage: "pm.sendRequest() is not yet implemented in Hoppscotch",
},
{
api: "pm.visualizer.set()",
script: 'pm.visualizer.set("<h1>Test</h1>")',
errorMessage:
"pm.visualizer.set() is not supported in Hoppscotch (Postman Visualizer feature)",
},
{
api: "pm.visualizer.clear()",
script: "pm.visualizer.clear()",
errorMessage:
"pm.visualizer.clear() is not supported in Hoppscotch (Postman Visualizer feature)",
},
{
api: "pm.require()",
script: 'pm.require("@team/package")',
errorMessage:
"pm.require('@team/package') is not supported in Hoppscotch (Package Library feature)",
},
]
describe("pm namespace - unsupported features", () => { describe("pm namespace - unsupported features", () => {
test("pm.info.iteration throws error", () => { // Test unsupported APIs in both pre-request and test scripts
return expect( test.each(unsupportedApis)(
runTest( "$api throws error in pre-request script",
` ({ script, errorMessage }) => {
try { return expect(
const iteration = pm.info.iteration runPreRequest(script, {
pm.test("Should not reach here", () => {
pm.expect(true).toBe(false)
})
} catch (error) {
pm.test("Throws correct error", () => {
pm.expect(error.message).toInclude("pm.info.iteration is not supported")
})
}
`,
{
global: [], global: [],
selected: [], selected: [],
} })()
)() ).resolves.toEqualLeft(`Script execution failed: Error: ${errorMessage}`)
).resolves.toEqualRight([ }
expect.objectContaining({ )
children: [
expect.objectContaining({
descriptor: "Throws correct error",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
],
}),
])
})
test("pm.info.iterationCount throws error", () => { test.each(unsupportedApis)(
return expect( "$api throws error in test script",
runTest( ({ script, errorMessage }) => {
` return expect(
try { runTest(script, {
const iterationCount = pm.info.iterationCount
pm.test("Should not reach here", () => {
pm.expect(true).toBe(false)
})
} catch (error) {
pm.test("Throws correct error", () => {
pm.expect(error.message).toInclude("pm.info.iterationCount is not supported")
})
}
`,
{
global: [], global: [],
selected: [], selected: [],
} })()
)() ).resolves.toEqualLeft(`Script execution failed: Error: ${errorMessage}`)
).resolves.toEqualRight([ }
expect.objectContaining({ )
children: [
expect.objectContaining({
descriptor: "Throws correct error",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
],
}),
])
})
test("pm.collectionVariables.get() throws error", () => {
return expect(
runTest(
`
try {
pm.collectionVariables.get("test")
pm.test("Should not reach here", () => {
pm.expect(true).toBe(false)
})
} catch (error) {
pm.test("Throws correct error", () => {
pm.expect(error.message).toInclude("pm.collectionVariables.get() is not supported")
})
}
`,
{
global: [],
selected: [],
}
)()
).resolves.toEqualRight([
expect.objectContaining({
children: [
expect.objectContaining({
descriptor: "Throws correct error",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
],
}),
])
})
test("pm.vault.get() throws error", () => {
return expect(
runTest(
`
try {
pm.vault.get("test")
pm.test("Should not reach here", () => {
pm.expect(true).toBe(false)
})
} catch (error) {
pm.test("Throws correct error", () => {
pm.expect(error.message).toInclude("pm.vault.get() is not supported")
})
}
`,
{
global: [],
selected: [],
}
)()
).resolves.toEqualRight([
expect.objectContaining({
children: [
expect.objectContaining({
descriptor: "Throws correct error",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
],
}),
])
})
test("pm.iterationData.get() throws error", () => {
return expect(
runTest(
`
try {
pm.iterationData.get("test")
pm.test("Should not reach here", () => {
pm.expect(true).toBe(false)
})
} catch (error) {
pm.test("Throws correct error", () => {
pm.expect(error.message).toInclude("pm.iterationData.get() is not supported")
})
}
`,
{
global: [],
selected: [],
}
)()
).resolves.toEqualRight([
expect.objectContaining({
children: [
expect.objectContaining({
descriptor: "Throws correct error",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
],
}),
])
})
test("pm.execution.setNextRequest() throws error", () => {
return expect(
runTest(
`
try {
pm.execution.setNextRequest("next-request")
pm.test("Should not reach here", () => {
pm.expect(true).toBe(false)
})
} catch (error) {
pm.test("Throws correct error", () => {
pm.expect(error.message).toInclude("pm.execution.setNextRequest() is not supported")
})
}
`,
{
global: [],
selected: [],
}
)()
).resolves.toEqualRight([
expect.objectContaining({
children: [
expect.objectContaining({
descriptor: "Throws correct error",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
],
}),
])
})
test("pm.sendRequest() throws error", () => {
return expect(
runTest(
`
try {
pm.sendRequest("https://example.com", () => {})
pm.test("Should not reach here", () => {
pm.expect(true).toBe(false)
})
} catch (error) {
pm.test("Throws correct error", () => {
pm.expect(error.message).toInclude("pm.sendRequest() is not yet implemented")
})
}
`,
{
global: [],
selected: [],
}
)()
).resolves.toEqualRight([
expect.objectContaining({
children: [
expect.objectContaining({
descriptor: "Throws correct error",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
],
}),
])
})
test("pm.visualizer.set() throws error", () => {
return expect(
runTest(
`
try {
pm.visualizer.set("<h1>Test</h1>")
pm.test("Should not reach here", () => {
pm.expect(true).toBe(false)
})
} catch (error) {
pm.test("Throws correct error", () => {
pm.expect(error.message).toInclude("pm.visualizer.set() is not supported")
})
}
`,
{
global: [],
selected: [],
}
)()
).resolves.toEqualRight([
expect.objectContaining({
children: [
expect.objectContaining({
descriptor: "Throws correct error",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
],
}),
])
})
test("pm.visualizer.clear() throws error", () => {
return expect(
runTest(
`
try {
pm.visualizer.clear()
pm.test("Should not reach here", () => {
pm.expect(true).toBe(false)
})
} catch (error) {
pm.test("Throws correct error", () => {
pm.expect(error.message).toInclude("pm.visualizer.clear() is not supported")
})
}
`,
{
global: [],
selected: [],
}
)()
).resolves.toEqualRight([
expect.objectContaining({
children: [
expect.objectContaining({
descriptor: "Throws correct error",
expectResults: [{ status: "pass", message: expect.any(String) }],
}),
],
}),
])
})
}) })

View file

@ -3751,37 +3751,37 @@
collectionVariables: { collectionVariables: {
get: () => { get: () => {
throw new Error( throw new Error(
"pm.collectionVariables.get() is not supported in Hoppscotch (Workspace feature)" "pm.collectionVariables.get() is not supported in Hoppscotch (use environment or request variables instead)"
) )
}, },
set: () => { set: () => {
throw new Error( throw new Error(
"pm.collectionVariables.set() is not supported in Hoppscotch (Workspace feature)" "pm.collectionVariables.set() is not supported in Hoppscotch (use environment or request variables instead)"
) )
}, },
unset: () => { unset: () => {
throw new Error( throw new Error(
"pm.collectionVariables.unset() is not supported in Hoppscotch (Workspace feature)" "pm.collectionVariables.unset() is not supported in Hoppscotch (use environment or request variables instead)"
) )
}, },
has: () => { has: () => {
throw new Error( throw new Error(
"pm.collectionVariables.has() is not supported in Hoppscotch (Workspace feature)" "pm.collectionVariables.has() is not supported in Hoppscotch (use environment or request variables instead)"
) )
}, },
clear: () => { clear: () => {
throw new Error( throw new Error(
"pm.collectionVariables.clear() is not supported in Hoppscotch (Workspace feature)" "pm.collectionVariables.clear() is not supported in Hoppscotch (use environment or request variables instead)"
) )
}, },
toObject: () => { toObject: () => {
throw new Error( throw new Error(
"pm.collectionVariables.toObject() is not supported in Hoppscotch (Workspace feature)" "pm.collectionVariables.toObject() is not supported in Hoppscotch (use environment or request variables instead)"
) )
}, },
replaceIn: () => { replaceIn: () => {
throw new Error( throw new Error(
"pm.collectionVariables.replaceIn() is not supported in Hoppscotch (Workspace feature)" "pm.collectionVariables.replaceIn() is not supported in Hoppscotch (use environment or request variables instead)"
) )
}, },
}, },

View file

@ -1219,7 +1219,7 @@
}, },
// Unsupported APIs that throw errors // Unsupported APIs that throw errors
sendRequest: () => { sendRequest: (_request, _callback) => {
throw new Error("pm.sendRequest() is not yet implemented in Hoppscotch") throw new Error("pm.sendRequest() is not yet implemented in Hoppscotch")
}, },
@ -1255,6 +1255,11 @@
"pm.collectionVariables.toObject() is not supported in Hoppscotch (use environment or request variables instead)" "pm.collectionVariables.toObject() is not supported in Hoppscotch (use environment or request variables instead)"
) )
}, },
replaceIn: () => {
throw new Error(
"pm.collectionVariables.replaceIn() is not supported in Hoppscotch (use environment or request variables instead)"
)
},
}, },
// Postman Vault (unsupported) // Postman Vault (unsupported)
@ -1317,15 +1322,47 @@
"pm.iterationData.toObject() is not supported in Hoppscotch (Collection Runner feature)" "pm.iterationData.toObject() is not supported in Hoppscotch (Collection Runner feature)"
) )
}, },
toJSON: () => {
throw new Error(
"pm.iterationData.toJSON() is not supported in Hoppscotch (Collection Runner feature)"
)
},
}, },
// Execution control (unsupported) // Execution control (unsupported)
execution: { execution: {
location: (() => {
const location = ["Hoppscotch"]
Object.defineProperty(location, "current", {
value: "Hoppscotch",
writable: false,
enumerable: true,
})
Object.freeze(location)
return location
})(),
setNextRequest: () => { setNextRequest: () => {
throw new Error( throw new Error(
"pm.execution.setNextRequest() is not supported in Hoppscotch (Collection Runner feature)" "pm.execution.setNextRequest() is not supported in Hoppscotch (Collection Runner feature)"
) )
}, },
skipRequest: () => {
throw new Error(
"pm.execution.skipRequest() is not supported in Hoppscotch (Collection Runner feature)"
)
},
runRequest: () => {
throw new Error(
"pm.execution.runRequest() is not supported in Hoppscotch (Collection Runner feature)"
)
},
},
// Package imports (unsupported)
require: (packageName) => {
throw new Error(
`pm.require('${packageName}') is not supported in Hoppscotch (Package Library feature)`
)
}, },
} }
} }