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