Как принять разрешение для getUserMedia () в тестировании жасмина? - PullRequest
4 голосов
/ 30 мая 2019

Я пишу класс AudioRecorder, чья init () обращается к Navigator.mediaDevices.getUserMedia ({audio: true}).

Есть ли способ принять запрос на разрешение пользователя в DOM от Жасмин?

Источник:

export default class AudioRecorder {
  async init() {
    const audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });
    this.recorder = new MediaRecorder(audioStream)
  }

Жасмин:

it('init()', done => {
    const record = new AudioRecorder();

    record.init().then(() => {
      done();
    });
  });

1 Ответ

0 голосов
/ 03 июня 2019

Вы должны шпионить за navigator.mediaDevices.getUserMedia, вынуждая его вернуть обещание и разрешив его с требуемым значением.

Вы можете поместить что-то подобное в блоке beforeEach или вначало теста:

const audioStream = { ... }; // create a mock audio stream with the appropriate methods spied on
let promise = Promise.resolve(audioStream);
spyOn(navigator.mediaDevices, 'getUserMedia', promise);

Я бы также порекомендовал вам преобразовать ваш тест в асинхронный, например так:

  it('init()', async done => {
    const record = new AudioRecorder();
    const result = await record.init();
    // test something with the result of init
    done();
  });

Я думаю, что намного легче следить за потоком управленияздесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...