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