diff --git a/src/frontend/apps/impress/src/features/service-worker/__tests__/_app.test.tsx b/src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx
similarity index 62%
rename from src/frontend/apps/impress/src/features/service-worker/__tests__/_app.test.tsx
rename to src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx
index 91017b3d..36f4ad4f 100644
--- a/src/frontend/apps/impress/src/features/service-worker/__tests__/_app.test.tsx
+++ b/src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx
@@ -1,26 +1,15 @@
import '@testing-library/jest-dom';
import { render } from '@testing-library/react';
-import { Router } from 'next/router';
-import { PropsWithChildren, ReactElement } from 'react';
-import App from '@/pages/_app';
-import { AppWrapper } from '@/tests/utils';
-import { NextPageWithLayout } from '@/types/next';
+import { useSWRegister } from '../hooks/useSWRegister';
+
+const TestComponent = () => {
+ useSWRegister();
-const Page: NextPageWithLayout = () => {
return
Test Page
;
};
-Page.getLayout = function getLayout(page: ReactElement) {
- return {page}
;
-};
-
-jest.mock('@/core/', () => ({
- ...jest.requireActual('@/core/'),
- AppProvider: ({ children }: PropsWithChildren) => {children}
,
-}));
-
-describe('App', () => {
+describe('useSWRegister', () => {
it('checks service-worker is register', () => {
process.env.NEXT_PUBLIC_BUILD_ID = '123456';
jest.spyOn(console, 'error').mockImplementation(() => {});
@@ -39,9 +28,7 @@ describe('App', () => {
writable: true,
});
- render(, {
- wrapper: AppWrapper,
- });
+ render();
expect(registerSpy).toHaveBeenCalledWith('/service-worker.js?v=123456');
});
@@ -64,9 +51,7 @@ describe('App', () => {
writable: true,
});
- render(, {
- wrapper: AppWrapper,
- });
+ render();
expect(registerSpy).not.toHaveBeenCalledWith('/service-worker.js?v=123456');
});
diff --git a/src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx b/src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx
new file mode 100644
index 00000000..eadeecc7
--- /dev/null
+++ b/src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx
@@ -0,0 +1,16 @@
+import { useEffect } from 'react';
+
+export const useSWRegister = () => {
+ useEffect(() => {
+ if (
+ 'serviceWorker' in navigator &&
+ process.env.NEXT_PUBLIC_SW_DEACTIVATED !== 'true'
+ ) {
+ navigator.serviceWorker
+ .register(`/service-worker.js?v=${process.env.NEXT_PUBLIC_BUILD_ID}`)
+ .catch((err) => {
+ console.error('Service worker registration failed:', err);
+ });
+ }
+ }, []);
+};
diff --git a/src/frontend/apps/impress/src/features/service-worker/index.ts b/src/frontend/apps/impress/src/features/service-worker/index.ts
new file mode 100644
index 00000000..79604f23
--- /dev/null
+++ b/src/frontend/apps/impress/src/features/service-worker/index.ts
@@ -0,0 +1 @@
+export * from './hooks/useSWRegister';
diff --git a/src/frontend/apps/impress/src/pages/_app.tsx b/src/frontend/apps/impress/src/pages/_app.tsx
index c78ded8b..61793e38 100644
--- a/src/frontend/apps/impress/src/pages/_app.tsx
+++ b/src/frontend/apps/impress/src/pages/_app.tsx
@@ -1,9 +1,9 @@
import type { AppProps } from 'next/app';
import Head from 'next/head';
-import { useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { AppProvider } from '@/core/';
+import { useSWRegister } from '@/features/service-worker/';
import { NextPageWithLayout } from '@/types/next';
import './globals.css';
@@ -13,22 +13,10 @@ type AppPropsWithLayout = AppProps & {
};
export default function App({ Component, pageProps }: AppPropsWithLayout) {
+ useSWRegister();
const getLayout = Component.getLayout ?? ((page) => page);
const { t } = useTranslation();
- useEffect(() => {
- if (
- 'serviceWorker' in navigator &&
- process.env.NEXT_PUBLIC_SW_DEACTIVATED !== 'true'
- ) {
- navigator.serviceWorker
- .register(`/service-worker.js?v=${process.env.NEXT_PUBLIC_BUILD_ID}`)
- .catch((err) => {
- console.error('Service worker registration failed:', err);
- });
- }
- }, []);
-
return (
<>