49 lines
1.7 KiB
TypeScript
49 lines
1.7 KiB
TypeScript
require('react-test-renderer');
|
|
const { renderHook, act } = require('@testing-library/react-hooks');
|
|
const { useLocationTracking } = require('../useLocationTracking');
|
|
|
|
describe('useLocationTracking', () => {
|
|
let origGeo;
|
|
|
|
beforeEach(() => {
|
|
origGeo = global.navigator && global.navigator.geolocation;
|
|
global.navigator = global.navigator || {};
|
|
global.navigator.geolocation = {
|
|
watchPosition: jest.fn((success) => {
|
|
// Immediately call with a sample position
|
|
success({ coords: { latitude: 10, longitude: 20 } });
|
|
// Return a fake id
|
|
return 42;
|
|
}),
|
|
clearWatch: jest.fn()
|
|
};
|
|
});
|
|
|
|
afterEach(() => {
|
|
if (origGeo) global.navigator.geolocation = origGeo;
|
|
else delete global.navigator.geolocation;
|
|
jest.resetAllMocks();
|
|
});
|
|
|
|
it('starts and stops tracking and collects path', () => {
|
|
const { result } = renderHook(() => useLocationTracking());
|
|
|
|
expect(result.current.isTracking).toBe(false);
|
|
act(() => result.current.startTracking());
|
|
expect(result.current.isTracking).toBe(true);
|
|
expect(result.current.path.length).toBeGreaterThanOrEqual(1);
|
|
|
|
act(() => result.current.stopTracking());
|
|
expect(result.current.isTracking).toBe(false);
|
|
expect(global.navigator.geolocation.clearWatch).toHaveBeenCalled();
|
|
});
|
|
|
|
it('clears path', () => {
|
|
const { result } = renderHook(() => useLocationTracking());
|
|
act(() => result.current.startTracking());
|
|
expect(result.current.path.length).toBeGreaterThanOrEqual(1);
|
|
act(() => result.current.clear());
|
|
expect(result.current.path.length).toBe(0);
|
|
});
|
|
});
|