首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试一个使用和Mocha &柴的库

测试一个使用和Mocha &柴的库
EN

Stack Overflow用户
提问于 2019-03-21 00:38:30
回答 1查看 974关注 0票数 2

我正在构建一个库,它使用网络音频api(ToneJS更具体)。

我试过使用jsdom,mocha-jsdom,但没有成功。

我知道这个错误-

代码语言:javascript
复制
node_modules/tone/build/Tone.js:3869
                this.input = this.output = this._gainNode = this.context.createGain();

这是有意义的,并告诉我,我需要使用一个环境的上下文。

我甚至不知道该如何为我的项目设置测试。

如何为我的项目正确地设置测试环境?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-02 11:03:55

我建议在单元测试中完全不要使用Tone.js。Tone.js只在浏览器中工作,因为它需要。相反,您可以使用Tone.js的间谍/模拟/存根,这只需确保您使用的是预期的音调。

例如,如果您想为AudioManager编写一个测试,您可以创建一个简化的Tone.js模拟,它只提供您需要的内容。

代码语言:javascript
复制
const FakeTone = {
    Players: function () { },
    context: { resume () { } }
};

接下来,我建议重写AudioManager,使其接受音调作为构造函数参数,而不是导入它。这将使测试更加容易。而不是..。

代码语言:javascript
复制
import Tone from 'tone';

export class AudioManager {

    // ...

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

    // ...

}

..。然后就是..。

代码语言:javascript
复制
export class AudioManager {

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

    // ...

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

    // ...

}

..。一开始看上去有点难看,但希望过一段时间你就会习惯了。:-)

这将允许您使用AudioManager对象测试FakeTone。

代码语言:javascript
复制
const audioManager = new AudioManager(FakeTone);

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

您还可以使用像Sinon.JS这样的工具来编写更高级的测试。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55272123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档