无头JavaScript测试HTML5音频/视频
我知道还有很多其他类似的问题,但是答案并不能解决这个问题 我的网站上使用了一个JavaScript文件,该文件使用HTML5Web音频,并希望对其进行单元测试 我已经研究过在PhantomJS中使用QUnit,在你说之前,我知道PhantomJS不支持它(),但是我想知道是否有办法解决这个问题 在浏览器中使用QUnit进行测试正如您所期望的那样,但我不想每次都使用浏览器进行测试,我希望它在服务器上实现自动化 失败测试之一的示例:无头JavaScript测试HTML5音频/视频,javascript,unit-testing,phantomjs,qunit,headless,Javascript,Unit Testing,Phantomjs,Qunit,Headless,我知道还有很多其他类似的问题,但是答案并不能解决这个问题 我的网站上使用了一个JavaScript文件,该文件使用HTML5Web音频,并希望对其进行单元测试 我已经研究过在PhantomJS中使用QUnit,在你说之前,我知道PhantomJS不支持它(),但是我想知道是否有办法解决这个问题 在浏览器中使用QUnit进行测试正如您所期望的那样,但我不想每次都使用浏览器进行测试,我希望它在服务器上实现自动化 失败测试之一的示例: QUnit.test("isPlaying", function(
QUnit.test("isPlaying", function(assert){
// true case
My.Sound.play("background");
assert.ok(My.Sound.isPlaying("background"), "The background audio is playing");
// false case
My.Sound.pause("background");
assert.ok(!My.Sound.isPlaying("background"), "The background audio is not playing");
});
正如@jakerella已经指出的,测试第三方API是没有意义的。只需关注您的功能。在这种情况下,您应该测试,无论何时您想要播放/暂停一个声音,您都应该为您的声音对象(播放/暂停)调用正确的api方法,该对象应该是原始实现的存根
QUnit.test("play button should play sound when clicked", (assert) => {
const button = someButton; //...get your button / play trigger here
const playStub = stub(My.Sound, 'play');
//trigger button click
assert.ok(playStub.called);
});
看看QUnit的存根功能。我不知道QUnit是否使用SlimerJS运行,但如果使用SlimerJS+xvfBy,您可以使用SlimerJS+xvfBy实现这一点。您可以随时模拟整个Web音频API。。。但似乎有点过分了。您在这里测试的是HTML5网络音频作品,而不是您自己的代码。与SlimerJS和xvfb的自动测试相关: