Skip to content

Commit a583e49

Browse files
authored
fix: reject with error and not event (#351)
1 parent 955f47d commit a583e49

File tree

2 files changed

+49
-25
lines changed

2 files changed

+49
-25
lines changed

src/index.test.ts

Lines changed: 44 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,11 @@ test("loadCallback callback should fire", () => {
118118
test("script onerror should reject promise", async () => {
119119
const loader = new Loader({ apiKey: "foo", retries: 0 });
120120

121-
const rejection = expect(loader.load()).rejects.toBeInstanceOf(ErrorEvent);
121+
const rejection = expect(loader.load()).rejects.toBeInstanceOf(Error);
122122

123-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
123+
loader["loadErrorCallback"](
124+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
125+
);
124126

125127
await rejection;
126128
expect(loader["done"]).toBeTruthy();
@@ -132,16 +134,20 @@ test("script onerror should reject promise with multiple loaders", async () => {
132134
const loader = new Loader({ apiKey: "foo", retries: 0 });
133135
const extraLoader = new Loader({ apiKey: "foo", retries: 0 });
134136

135-
let rejection = expect(loader.load()).rejects.toBeInstanceOf(ErrorEvent);
136-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
137+
let rejection = expect(loader.load()).rejects.toBeInstanceOf(Error);
138+
loader["loadErrorCallback"](
139+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
140+
);
137141

138142
await rejection;
139143
expect(loader["done"]).toBeTruthy();
140144
expect(loader["loading"]).toBeFalsy();
141145
expect(loader["onerrorEvent"]).toBeInstanceOf(ErrorEvent);
142146

143-
rejection = expect(extraLoader.load()).rejects.toBeInstanceOf(ErrorEvent);
144-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
147+
rejection = expect(extraLoader.load()).rejects.toBeInstanceOf(Error);
148+
loader["loadErrorCallback"](
149+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
150+
);
145151

146152
await rejection;
147153
expect(extraLoader["done"]).toBeTruthy();
@@ -151,12 +157,16 @@ test("script onerror should reject promise with multiple loaders", async () => {
151157
test("script onerror should retry", async () => {
152158
const loader = new Loader({ apiKey: "foo", retries: 1 });
153159
const deleteScript = jest.spyOn(loader, "deleteScript");
154-
const rejection = expect(loader.load()).rejects.toBeInstanceOf(ErrorEvent);
160+
const rejection = expect(loader.load()).rejects.toBeInstanceOf(Error);
155161
// eslint-disable-next-line @typescript-eslint/no-empty-function
156162
console.log = jest.fn();
157163

158-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
159-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
164+
loader["loadErrorCallback"](
165+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
166+
);
167+
loader["loadErrorCallback"](
168+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
169+
);
160170
jest.runAllTimers();
161171

162172
await rejection;
@@ -173,19 +183,27 @@ test("script onerror should reset retry mechanism with next loader", async () =>
173183
// eslint-disable-next-line @typescript-eslint/no-empty-function
174184
console.log = jest.fn();
175185

176-
let rejection = expect(loader.load()).rejects.toBeInstanceOf(ErrorEvent);
177-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
178-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
186+
let rejection = expect(loader.load()).rejects.toBeInstanceOf(Error);
187+
loader["loadErrorCallback"](
188+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
189+
);
190+
loader["loadErrorCallback"](
191+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
192+
);
179193
jest.runAllTimers();
180194
await rejection;
181195

182-
rejection = expect(loader.load()).rejects.toBeInstanceOf(ErrorEvent);
196+
rejection = expect(loader.load()).rejects.toBeInstanceOf(Error);
183197
expect(loader["done"]).toBeFalsy();
184198
expect(loader["loading"]).toBeTruthy();
185199
expect(loader["errors"].length).toBe(0);
186200

187-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
188-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
201+
loader["loadErrorCallback"](
202+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
203+
);
204+
loader["loadErrorCallback"](
205+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
206+
);
189207
jest.runAllTimers();
190208

191209
await rejection;
@@ -199,10 +217,14 @@ test("script onerror should not reset retry mechanism with parallel loaders", as
199217
// eslint-disable-next-line @typescript-eslint/no-empty-function
200218
console.log = jest.fn();
201219

202-
const rejection1 = expect(loader.load()).rejects.toBeInstanceOf(ErrorEvent);
203-
const rejection2 = expect(loader.load()).rejects.toBeInstanceOf(ErrorEvent);
204-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
205-
loader["loadErrorCallback"](document.createEvent("ErrorEvent"));
220+
const rejection1 = expect(loader.load()).rejects.toBeInstanceOf(Error);
221+
const rejection2 = expect(loader.load()).rejects.toBeInstanceOf(Error);
222+
loader["loadErrorCallback"](
223+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
224+
);
225+
loader["loadErrorCallback"](
226+
new ErrorEvent("ErrorEvent(", { error: new Error("") })
227+
);
206228
jest.runAllTimers();
207229

208230
await Promise.all([rejection1, rejection2]);
@@ -301,7 +323,9 @@ test("loader should resolve immediately when failed loading", async () => {
301323
// use await/async pattern since the promise rejects without trigger
302324
const loader = new Loader({ apiKey: "foo", retries: 0 });
303325
loader["done"] = true;
304-
loader["onerrorEvent"] = document.createEvent("ErrorEvent");
326+
loader["onerrorEvent"] = new ErrorEvent("ErrorEvent(", {
327+
error: new Error(""),
328+
});
305329

306330
await expect(loader.loadPromise()).rejects.toBeDefined();
307331
});

src/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,10 @@ export class Loader {
241241
url: string;
242242

243243
private CALLBACK = "__googleMapsCallback";
244-
private callbacks: ((e: Event) => void)[] = [];
244+
private callbacks: ((e: ErrorEvent) => void)[] = [];
245245
private done = false;
246246
private loading = false;
247-
private onerrorEvent: Event;
247+
private onerrorEvent: ErrorEvent;
248248
private static instance: Loader;
249249
private errors: ErrorEvent[] = [];
250250

@@ -378,11 +378,11 @@ export class Loader {
378378
*/
379379
loadPromise(): Promise<typeof google> {
380380
return new Promise((resolve, reject) => {
381-
this.loadCallback((err: Event) => {
381+
this.loadCallback((err: ErrorEvent) => {
382382
if (!err) {
383383
resolve(window.google);
384384
} else {
385-
reject(err);
385+
reject(err.error);
386386
}
387387
});
388388
});
@@ -391,7 +391,7 @@ export class Loader {
391391
/**
392392
* Load the Google Maps JavaScript API script with a callback.
393393
*/
394-
loadCallback(fn: (e: Event) => void): void {
394+
loadCallback(fn: (e: ErrorEvent) => void): void {
395395
this.callbacks.push(fn);
396396
this.execute();
397397
}

0 commit comments

Comments
 (0)