diff --git a/cypress/e2e/14-mapping.cy.ts b/cypress/e2e/14-mapping.cy.ts index 951ff9d702..9ccda6b6a4 100644 --- a/cypress/e2e/14-mapping.cy.ts +++ b/cypress/e2e/14-mapping.cy.ts @@ -188,7 +188,11 @@ describe('Data mapping', () => { ndv.getters .inlineExpressionEditorInput() .should('have.text', `{{ $('${SCHEDULE_TRIGGER_NODE_NAME}').item.json.input[0].count }}`); - ndv.getters.parameterExpressionPreview('value').should('not.exist'); + ndv.getters + .parameterExpressionPreview('value') + .invoke('text') + .invoke('replace', /\u00a0/g, ' ') + .should('equal', '[ERROR: no data, execute "Schedule Trigger" node first]'); ndv.actions.switchInputMode('Table'); ndv.actions.mapDataFromHeader(1, 'value'); diff --git a/packages/workflow/src/WorkflowDataProxy.ts b/packages/workflow/src/WorkflowDataProxy.ts index 913dda6da7..03d4ffc40f 100644 --- a/packages/workflow/src/WorkflowDataProxy.ts +++ b/packages/workflow/src/WorkflowDataProxy.ts @@ -943,6 +943,10 @@ export class WorkflowDataProxy { throw createExpressionError(`"${nodeName}" node doesn't exist`); } + if (!that?.runExecutionData?.resultData?.runData.hasOwnProperty(nodeName)) { + throw createExpressionError(`no data, execute "${nodeName}" node first`); + } + return new Proxy( {}, { diff --git a/packages/workflow/test/WorkflowDataProxy.test.ts b/packages/workflow/test/WorkflowDataProxy.test.ts index 301d2bf0a4..7123f86f9d 100644 --- a/packages/workflow/test/WorkflowDataProxy.test.ts +++ b/packages/workflow/test/WorkflowDataProxy.test.ts @@ -2,6 +2,7 @@ import type { IConnections, IExecuteData, INode, IRunExecutionData } from '@/Int import { Workflow } from '@/Workflow'; import { WorkflowDataProxy } from '@/WorkflowDataProxy'; import * as Helpers from './Helpers'; +import { ExpressionError } from '@/ExpressionError'; describe('WorkflowDataProxy', () => { describe('test data proxy', () => { @@ -37,13 +38,21 @@ describe('WorkflowDataProxy', () => { position: [460, 200], }, { - name: 'End', + name: 'Set', type: 'test.set', parameters: {}, typeVersion: 1, id: 'uuid-4', position: [640, 200], }, + { + name: 'End', + type: 'test.set', + parameters: {}, + typeVersion: 1, + id: 'uuid-5', + position: [640, 200], + }, ]; const connections: IConnections = { @@ -282,6 +291,14 @@ describe('WorkflowDataProxy', () => { expect(proxy.$('Rename').params).toEqual({ value1: 'data', value2: 'initialName' }); }); + test('$("NodeName")', () => { + expect(() => proxy.$('doNotExist')).toThrowError(ExpressionError); + }); + + test('$("NodeName")', () => { + expect(() => proxy.$('Set')).toThrowError(ExpressionError); + }); + test('test $input.all()', () => { expect(proxy.$input.all()[1].json.data).toEqual(160); });