JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 142776
  • Score
    100M100P100Q171100F
  • License MIT

A Location class that implements the Location interface of the Web API.

Package Exports

  • @jedmao/location

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@jedmao/location) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@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')
})