@fakes/media-devices
Version:
A interactive fake implementation of MediaDevices interface in the browser for testing
57 lines (49 loc) • 2.16 kB
text/typescript
import { defaultContext } from './context'
import { MediaStreamFake, mediaStreamId } from './MediaStreamFake'
import { anyMediaStreamTrack } from './MediaStreamTrackMother'
describe('MediaStreamFake', () => {
test('create a new one', () => {
expect(new MediaStreamFake(defaultContext(), mediaStreamId(), [])).toBeDefined()
})
test('do not leak internal state ', () => {
const fake = new MediaStreamFake(defaultContext(), mediaStreamId(), [])
fake.getTracks().push(anyMediaStreamTrack())
expect(fake.getTracks()).toHaveLength(0)
})
test('derive active state from contained tracks', () => {
const liveTrack = anyMediaStreamTrack({ readyState: 'live' })
const fake = new MediaStreamFake(defaultContext(), mediaStreamId(), [liveTrack])
expect(fake.active).toBe(true)
liveTrack.stop()
expect(fake.active).toBe(false)
})
test('filtered tracks', () => {
const audioTrack = anyMediaStreamTrack({ kind: 'audio' })
const videoTrack = anyMediaStreamTrack({ kind: 'video' })
const fake = new MediaStreamFake(defaultContext(), mediaStreamId(), [audioTrack, videoTrack])
expect(fake.getAudioTracks()).toEqual([audioTrack])
expect(fake.getVideoTracks()).toEqual([videoTrack])
})
test('return track by id', () => {
const wantedTrack = anyMediaStreamTrack({ id: 'wanted' })
const fake = new MediaStreamFake(defaultContext(), mediaStreamId(), [wantedTrack])
expect(fake.getTrackById('bogus')).toBe(null)
expect(fake.getTrackById('wanted')).toBe(wantedTrack)
})
test('remove track', () => {
const one = anyMediaStreamTrack()
const two = anyMediaStreamTrack()
const three = anyMediaStreamTrack()
const fake = new MediaStreamFake(defaultContext(), mediaStreamId(), [one, two, three])
const notIncluded = anyMediaStreamTrack()
fake.removeTrack(notIncluded)
expect(fake.getTracks()).toIncludeSameMembers([one, two, three])
fake.removeTrack(two)
expect(fake.getTracks()).toIncludeSameMembers([one, three])
})
})
describe('mediaStreamId', () => {
test('length of 36 characters', () => {
expect(mediaStreamId()).toHaveLength(36)
})
})