The Node.js® Website
1import { renderHook, waitFor } from '@testing-library/react';
2
3import { useDetectOS } from '..';
4
5const windowsUserAgent =
6 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36';
7
8const macUserAgent =
9 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36';
10
11const originalNavigator = global.navigator;
12
13describe('useDetectOS', () => {
14 afterEach(() => {
15 Object.defineProperty(global, 'navigator', {
16 value: originalNavigator,
17 writable: true,
18 });
19 });
20
21 it('should detect WIN OS and 64 bitness', async () => {
22 Object.defineProperty(global, 'navigator', {
23 value: {
24 userAgent: windowsUserAgent,
25 userAgentData: {
26 getHighEntropyValues: jest.fn().mockResolvedValue({ bitness: 64 }),
27 },
28 },
29 writable: true,
30 });
31
32 const { result } = renderHook(() => useDetectOS());
33
34 await waitFor(() => {
35 expect(result.current).toStrictEqual({
36 os: 'WIN',
37 bitness: 64,
38 architecture: '',
39 });
40 });
41 });
42
43 it('should detect WIN OS and 64 bitness from user agent', async () => {
44 Object.defineProperty(global, 'navigator', {
45 value: {
46 userAgent: windowsUserAgent,
47 },
48 writable: true,
49 });
50
51 const { result } = renderHook(() => useDetectOS());
52
53 await waitFor(() => {
54 expect(result.current).toStrictEqual({
55 os: 'WIN',
56 bitness: 64,
57 architecture: '',
58 });
59 });
60 });
61
62 it('should detect MAC OS and default bitness', async () => {
63 Object.defineProperty(global, 'navigator', {
64 value: {
65 userAgent: macUserAgent,
66 },
67 writable: true,
68 });
69
70 const { result } = renderHook(() => useDetectOS());
71
72 await waitFor(() => {
73 expect(result.current).toStrictEqual({
74 os: 'MAC',
75 bitness: 86,
76 architecture: '',
77 });
78 });
79 });
80});