我正在构建一个库,它使用网络音频api(ToneJS更具体)。
我试过使用jsdom,mocha-jsdom,但没有成功。
我知道这个错误-
node_modules/tone/build/Tone.js:3869
this.input = this.output = this._gainNode = this.context.createGain();这是有意义的,并告诉我,我需要使用一个环境的上下文。
我甚至不知道该如何为我的项目设置测试。
如何为我的项目正确地设置测试环境?
发布于 2019-04-02 11:03:55
我建议在单元测试中完全不要使用Tone.js。Tone.js只在浏览器中工作,因为它需要。相反,您可以使用Tone.js的间谍/模拟/存根,这只需确保您使用的是预期的音调。
例如,如果您想为AudioManager编写一个测试,您可以创建一个简化的Tone.js模拟,它只提供您需要的内容。
const FakeTone = {
Players: function () { },
context: { resume () { } }
};接下来,我建议重写AudioManager,使其接受音调作为构造函数参数,而不是导入它。这将使测试更加容易。而不是..。
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这样的工具来编写更高级的测试。
https://stackoverflow.com/questions/55272123
复制相似问题