Testing A Library That Uses The Web Audio API With Mocha & Chai

≡放荡痞女 提交于 2019-12-11 17:42:07

问题


I am building a library which uses the web audio api(ToneJS to be more specific).

I have tried using jsdom, mocha-jsdom with no success.

I get this error -

node_modules/tone/build/Tone.js:3869
                this.input = this.output = this._gainNode = this.context.createGain();

Which makes sense and tells me that i need to use an environment with a context.

I'm not even sure how i should setup the tests for my project.

How should i setup a test environment correctly for my project?


回答1:


I would suggest to not use Tone.js at all in your unit tests. Tone.js only works in the browser as it requires the Web Audio API. Instead you could use a spy/mock/stub of Tone.js which just makes sure that you use Tone as intended.

If you for example want to write a test for the AudioManager you could create a stripped down mock of Tone.js which just provides what you need.

const FakeTone = {
    Players: function () { },
    context: { resume () { } }
};

Next I would recommend to rewrite the AudioManager in a way that it accepts Tone as a constructor argument instead of importing it. This will make testing a lot easier. Instead of ...

import Tone from 'tone';

export class AudioManager {

    // ...

    generatePlayers () {
        return new Tone.Players()
    }

    // ...

}

... it would then be ...

export class AudioManager {

    constructor (Tone) {
        this.Tone = Tone;
    }

    // ...

    generatePlayers () {
        return new this.Tone.Players();
    }

    // ...

}

... which looks a bit ugly at first, but you hopefully get used to it after a while. :-)

This will allow you to test the AudioManager with the FakeTone object.

const audioManager = new AudioManager(FakeTone);

expect(audioManager.generatePlayers()).to.be.an.instanceOf(FakeTone.Players);

You could also use something like Sinon.JS to write more advanced tests.



来源:https://stackoverflow.com/questions/55272123/testing-a-library-that-uses-the-web-audio-api-with-mocha-chai

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!