如何在 Jasmine 测试中释放 AudioContext
How to Release AudioContext in Jasmine Tests
我有一个设置 audioContext 的 Angular 服务。 Jasmine 正在为每个测试创建一个新服务,因此在 6 次测试之后所有测试都失败并显示错误:
Error: Failed to construct 'AudioContext': The number of hardware contexts provided (6) is greater than or equal to the maximum bound (6).
有没有办法让我在测试之间清除 AudioContext?我已经在 afterEach 块中尝试 AudioPlayer.context.close()
,但似乎没有用。
服务看起来有点像这样:
angular.module('myApp')
.service('AudioPlayer', function () {
var self = this;
self.context = new AudioContext();
this.doSomething = function () {
// doing super cool testable stuff here
}
})
测试看起来有点像这样:
describe('AudioPlayer', function () {
var AudioPlayer;
beforeEach(function () {
inject(function ($injector) {
AudioPlayer = $injector.get('AudioPlayer');
});
});
afterEach(function () {
AudioPlayer.context.close();
});
it('does cool stuff', function () {
AudioPlayer.doSomething();
// unit test
});
it('does other cool stuff', function () {
AudioPlayer.doSomething();
// unit test
});
});
感谢您的帮助!
这是一个说明问题的 jsFiddle:
http://jsfiddle.net/briankeane/cp929can/1/
我最终在测试中创建了一个类似单例的上下文,然后用一个 returns 相同 AudioContext 的函数对构造函数进行存根...这是最终的测试代码:
describe('AudioPlayer', function () {
var AudioPlayer;
var context = new AudioContext(); // create the AudioContext once
beforeEach(function () {
module('myApp');
inject(function ($injector) {
spyOn(window, 'AudioContext').and.callFake(function () {
return context; // stub the constructor
});
AudioPlayer = $injector.get('AudioPlayer');
});
});
for (var i=0;i<7;i++) {
it('does cool stuff', function () {
AudioPlayer.doSomething();
expect(true).toBe(true);
// unit test
});
}
});
这是工作 fiddle:http://jsfiddle.net/briankeane/3ctngs1u/
希望这对某人有所帮助。
你可以关闭它。
audioCtx.close();
查看文档
audioContext.close()
我有一个设置 audioContext 的 Angular 服务。 Jasmine 正在为每个测试创建一个新服务,因此在 6 次测试之后所有测试都失败并显示错误:
Error: Failed to construct 'AudioContext': The number of hardware contexts provided (6) is greater than or equal to the maximum bound (6).
有没有办法让我在测试之间清除 AudioContext?我已经在 afterEach 块中尝试 AudioPlayer.context.close()
,但似乎没有用。
服务看起来有点像这样:
angular.module('myApp')
.service('AudioPlayer', function () {
var self = this;
self.context = new AudioContext();
this.doSomething = function () {
// doing super cool testable stuff here
}
})
测试看起来有点像这样:
describe('AudioPlayer', function () {
var AudioPlayer;
beforeEach(function () {
inject(function ($injector) {
AudioPlayer = $injector.get('AudioPlayer');
});
});
afterEach(function () {
AudioPlayer.context.close();
});
it('does cool stuff', function () {
AudioPlayer.doSomething();
// unit test
});
it('does other cool stuff', function () {
AudioPlayer.doSomething();
// unit test
});
});
感谢您的帮助!
这是一个说明问题的 jsFiddle: http://jsfiddle.net/briankeane/cp929can/1/
我最终在测试中创建了一个类似单例的上下文,然后用一个 returns 相同 AudioContext 的函数对构造函数进行存根...这是最终的测试代码:
describe('AudioPlayer', function () {
var AudioPlayer;
var context = new AudioContext(); // create the AudioContext once
beforeEach(function () {
module('myApp');
inject(function ($injector) {
spyOn(window, 'AudioContext').and.callFake(function () {
return context; // stub the constructor
});
AudioPlayer = $injector.get('AudioPlayer');
});
});
for (var i=0;i<7;i++) {
it('does cool stuff', function () {
AudioPlayer.doSomething();
expect(true).toBe(true);
// unit test
});
}
});
这是工作 fiddle:http://jsfiddle.net/briankeane/3ctngs1u/
希望这对某人有所帮助。
你可以关闭它。
audioCtx.close();
查看文档 audioContext.close()