Skip to content

Commit a327e4f

Browse files
committed
browser: tag API errors with module "browser"
Async rejects (promise helper) and sync throws (Panicf) now attach module=browser via WithFields. This lets Cloud Logs filter browser-originated errors without overriding the existing source field used by other systems.
1 parent 243e815 commit a327e4f

4 files changed

Lines changed: 28 additions & 3 deletions

File tree

internal/js/modules/k6/browser/browser/helpers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func promise(vu moduleVU, fn func() (result any, reason error)) *sobek.Promise {
9393
go func() {
9494
v, err := fn()
9595
if err != nil {
96-
reject(err)
96+
reject(k6ext.BrowserError(err))
9797
return
9898
}
9999
resolve(v)

internal/js/modules/k6/browser/browser/mapping.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/grafana/sobek"
1010

1111
"go.k6.io/k6/v2/internal/js/modules/k6/browser/common"
12+
"go.k6.io/k6/v2/internal/js/modules/k6/browser/k6ext"
1213

1314
k6common "go.k6.io/k6/v2/js/common"
1415
)
@@ -30,7 +31,7 @@ func mapBrowserToSobek(vu moduleVU) *sobek.Object {
3031
for k, v := range mapBrowser(vu) {
3132
err := obj.Set(k, rt.ToValue(v))
3233
if err != nil {
33-
k6common.Throw(rt, fmt.Errorf("mapping: %w", err))
34+
k6common.Throw(rt, k6ext.BrowserError(fmt.Errorf("mapping: %w", err)))
3435
}
3536
}
3637

internal/js/modules/k6/browser/k6ext/panic.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func Abortf(ctx context.Context, format string, a ...any) {
3232
// TODO: test.
3333
func Panicf(ctx context.Context, format string, a ...any) {
3434
failFunc := func(rt *sobek.Runtime, a ...any) {
35-
k6common.Throw(rt, fmt.Errorf(format, a...))
35+
k6common.Throw(rt, BrowserError(fmt.Errorf(format, a...)))
3636
}
3737
sharedPanic(ctx, failFunc, a...)
3838
}
@@ -100,3 +100,8 @@ func (e *UserFriendlyError) Error() string {
100100
return "canceled"
101101
}
102102
}
103+
104+
// BrowserError tags err as originating from the browser module.
105+
func BrowserError(err error) error {
106+
return errext.WithFields(err, map[string]any{"module": "browser"})
107+
}

internal/js/modules/k6/browser/tests/page_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/stretchr/testify/assert"
2626
"github.com/stretchr/testify/require"
2727

28+
"go.k6.io/k6/v2/errext"
2829
"go.k6.io/k6/v2/internal/js/modules/k6/browser/common"
2930
"go.k6.io/k6/v2/internal/js/modules/k6/browser/k6ext/k6test"
3031
k6metrics "go.k6.io/k6/v2/metrics"
@@ -299,6 +300,24 @@ func TestPageEvaluateMappingError(t *testing.T) { //nolint:tparallel
299300
}
300301
}
301302

303+
func TestPageEvaluateErrorHasBrowserModule(t *testing.T) {
304+
t.Parallel()
305+
306+
tb := newTestBrowser(t)
307+
tb.vu.ActivateVU()
308+
tb.vu.StartIteration(t)
309+
defer tb.vu.EndIteration(t)
310+
311+
_, err := tb.vu.RunAsync(t, `
312+
const page = await browser.newPage();
313+
await page.evaluate("() => { throw new Error('expected'); }");
314+
`)
315+
require.ErrorContains(t, err, "evaluating JS: Error: expected")
316+
317+
_, fields := errext.Format(err)
318+
assert.Equal(t, "browser", fields["module"])
319+
}
320+
302321
func TestPageGoto(t *testing.T) {
303322
t.Parallel()
304323

0 commit comments

Comments
 (0)