diff --git a/.changeset/flat-chefs-bathe.md b/.changeset/flat-chefs-bathe.md new file mode 100644 index 000000000..7351ecc00 --- /dev/null +++ b/.changeset/flat-chefs-bathe.md @@ -0,0 +1,5 @@ +--- +'@segment/analytics-next': patch +--- + +Fixes issue where options object would not be properly assigned if properties arg was explicitly undefined diff --git a/packages/browser/src/core/arguments-resolver/__tests__/index.test.ts b/packages/browser/src/core/arguments-resolver/__tests__/index.test.ts index e47fa0f61..7c56255d3 100644 --- a/packages/browser/src/core/arguments-resolver/__tests__/index.test.ts +++ b/packages/browser/src/core/arguments-resolver/__tests__/index.test.ts @@ -101,6 +101,18 @@ describe(resolveArguments, () => { expect(options).toEqual({}) expect(cb).toEqual(fn) }) + + test('options set if properties undefined', () => { + const [event, props, options] = resolveArguments( + 'Test Event', + undefined, + { context: { page: { path: '/custom' } } } + ) + + expect(event).toEqual('Test Event') + expect(props).toEqual({}) + expect(options).toEqual({ context: { page: { path: '/custom' } } }) + }) }) describe('event as object', () => { diff --git a/packages/browser/src/core/arguments-resolver/index.ts b/packages/browser/src/core/arguments-resolver/index.ts index 7ab195a00..b4a0428b4 100644 --- a/packages/browser/src/core/arguments-resolver/index.ts +++ b/packages/browser/src/core/arguments-resolver/index.ts @@ -38,7 +38,7 @@ export function resolveArguments( : {} let opts: Options = {} - if (isPlainObject(properties) && !isFunction(options)) { + if (!isFunction(options)) { opts = options ?? {} } diff --git a/packages/browser/src/core/events/__tests__/index.test.ts b/packages/browser/src/core/events/__tests__/index.test.ts index f8441d98b..86e6ecd0d 100644 --- a/packages/browser/src/core/events/__tests__/index.test.ts +++ b/packages/browser/src/core/events/__tests__/index.test.ts @@ -156,6 +156,14 @@ describe('Event Factory', () => { expect(track.context).toEqual({ opt1: true }) }) + test('sets context correctly if property arg is undefined', () => { + const track = factory.track('Order Completed', undefined, { + context: { page: { path: '/custom' } }, + }) + + expect(track.context).toEqual({ page: { path: '/custom' } }) + }) + test('sets integrations', () => { const track = factory.track( 'Order Completed',