Я бы предложил вообще не использовать Tone.js в ваших юнит-тестах. Tone.js работает только в браузере, так как для этого требуется API-интерфейс Web Audio. Вместо этого вы могли бы использовать шпион / заглушку / заглушку Tone.js, которая просто гарантирует, что вы используете Tone как положено.
Если вы, например, хотите написать тест для AudioManager , вы можете создать урезанный макет Tone.js, который просто предоставляет то, что вам нужно.
const FakeTone = {
Players: function () { },
context: { resume () { } }
};
Далее я бы порекомендовал переписать AudioManager таким образом, чтобы он принимал Tone в качестве аргумента конструктора вместо его импорта. Это сделает тестирование намного проще. Вместо ...
import Tone from 'tone';
export class AudioManager {
// ...
generatePlayers () {
return new Tone.Players()
}
// ...
}
... тогда это будет ...
export class AudioManager {
constructor (Tone) {
this.Tone = Tone;
}
// ...
generatePlayers () {
return new this.Tone.Players();
}
// ...
}
... поначалу это выглядит немного некрасиво, но, надеюсь, через некоторое время вы к этому привыкнете. : -)
Это позволит вам протестировать AudioManager с объектом FakeTone.
const audioManager = new AudioManager(FakeTone);
expect(audioManager.generatePlayers()).to.be.an.instanceOf(FakeTone.Players);
Вы также можете использовать что-то вроде Sinon.JS для написания более сложных тестов.