mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Make higher order function for logging errors support asynchronous rejecting with non error instance
Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
parent
18d13a23ac
commit
de8d5eef37
@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import loggerInjectable from "../../logger.injectable";
|
import loggerInjectable from "../../logger.injectable";
|
||||||
|
|
||||||
export type WithErrorLoggingFor = (
|
export type WithErrorLoggingFor = (
|
||||||
getErrorMessage: (error: Error) => string
|
getErrorMessage: (error: unknown) => string
|
||||||
) => <T extends (...args: any[]) => any>(
|
) => <T extends (...args: any[]) => any>(
|
||||||
toBeDecorated: T
|
toBeDecorated: T
|
||||||
) => (...args: Parameters<T>) => ReturnType<T>;
|
) => (...args: Parameters<T>) => ReturnType<T>;
|
||||||
@ -24,14 +24,19 @@ const withErrorLoggingInjectable = getInjectable({
|
|||||||
const returnValue = toBeDecorated(...args);
|
const returnValue = toBeDecorated(...args);
|
||||||
|
|
||||||
if (isPromise(returnValue)) {
|
if (isPromise(returnValue)) {
|
||||||
returnValue.catch((e: Error) => {
|
returnValue.catch((e) => {
|
||||||
logger.error(getErrorMessage(e as Error), e);
|
const errorMessage = getErrorMessage(e);
|
||||||
|
|
||||||
|
logger.error(errorMessage, e);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return returnValue;
|
return returnValue;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.error(getErrorMessage(e as Error), e);
|
const errorMessage = getErrorMessage(e);
|
||||||
|
|
||||||
|
logger.error(errorMessage, e);
|
||||||
|
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -33,7 +33,7 @@ describe("with-error-logging", () => {
|
|||||||
|
|
||||||
decorated = pipeline(
|
decorated = pipeline(
|
||||||
toBeDecorated,
|
toBeDecorated,
|
||||||
withErrorLoggingFor((error: Error) => `some-error-message-for-${error.message}`),
|
withErrorLoggingFor((error: any) => `some-error-message-for-${error.message}`),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -133,7 +133,11 @@ describe("with-error-logging", () => {
|
|||||||
|
|
||||||
decorated = pipeline(
|
decorated = pipeline(
|
||||||
toBeDecorated,
|
toBeDecorated,
|
||||||
withErrorLoggingFor((error: Error) => `some-error-message-for-${error.message}`),
|
|
||||||
|
withErrorLoggingFor(
|
||||||
|
(error: any) =>
|
||||||
|
`some-error-message-for-${error.message || error.someProperty}`,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -158,7 +162,7 @@ describe("with-error-logging", () => {
|
|||||||
expect(promiseStatus.fulfilled).toBe(false);
|
expect(promiseStatus.fulfilled).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when call rejects", () => {
|
describe("when call rejects with error instance", () => {
|
||||||
let error: Error;
|
let error: Error;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
@ -179,6 +183,30 @@ describe("with-error-logging", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("when call rejects with something else than error instance", () => {
|
||||||
|
let error: unknown;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
try {
|
||||||
|
await toBeDecorated.reject({ someProperty: "some-rejection" });
|
||||||
|
await returnValuePromise;
|
||||||
|
} catch (e) {
|
||||||
|
error = e;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it("logs the rejection", () => {
|
||||||
|
expect(loggerStub.error).toHaveBeenCalledWith(
|
||||||
|
"some-error-message-for-some-rejection",
|
||||||
|
error,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("rejects", () => {
|
||||||
|
return expect(() => returnValuePromise).rejects.toEqual({ someProperty: "some-rejection" });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("when call resolves with value", () => {
|
describe("when call resolves with value", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await toBeDecorated.resolve(42);
|
await toBeDecorated.resolve(42);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user