@jedmao/location
TypeScript icon, indicating that this package has built-in type declarations

3.0.0 • Public • Published

@jedmao/location

GitHub Actions NPM version npm license codecov BundlePhobia Minified BundlePhobia Minified + gzip code style: prettier Unicorn Approved

A LocationMock class that extends URL and implements the Location interface of the Web API. As always, with first-class TypeScript support!

Installation

npm i --save-dev @jedmao/location

Usage

import { LocationMock } from '@jedmao/location'

const loc = new LocationMock('http://foo.com/')
loc.assign('http://bar.com/')
loc.replace('http://baz.com/')
loc.reload()

Because this package extends URL, many features are provided for free. This means you can do this:

new LocationMock('http://jed:secret@test:42/foo?bar=baz#qux')

Which returns the following object:

LocationMock {
  href: 'http://jed:secret@test:42/foo?bar=baz#qux',
  origin: 'http://test:42',
  protocol: 'http:',
  username: 'jed',
  password: 'secret',
  host: 'test:42',
  hostname: 'test',
  port: '42',
  pathname: '/foo',
  search: '?bar=baz',
  searchParams: URLSearchParams { 'bar' => 'baz' },
  hash: '#qux' }

Mocking

A common use for this package is to mock the window.location, which you can do in Jest like so:

const { location: savedLocation } = window

beforeAll(() => {
  delete window.location
})

beforeEach(() => {
  window.location = new LocationMock('http://test/')
})

afterAll(() => {
  window.location = savedLocation
})

it('assigns /login', () => {
  const assign = jest
    .spyOn(window.location, 'assign')
    .mockImplementationOnce(() => {})

  window.location.assign('/login')

  expect(assign).toHaveBeenCalledWith('/login')
})

Package Sidebar

Install

npm i @jedmao/location

Weekly Downloads

124,900

Version

3.0.0

License

MIT

Unpacked Size

12.6 kB

Total Files

7

Last publish

Collaborators

  • jedmao