use*_*171 2 audio html5 phantomjs angularjs karma-jasmine
我正在尝试使用Karma和PhantomJS来测试我的应用程序,我收到错误:
PhantomJS 1.9.8 (Windows 7) Controller: SongsCtrl should attach a list of awesomeThings to the scope FAILED
ReferenceError: Can't find variable: Audio
Run Code Online (Sandbox Code Playgroud)
我的AngularJS服务中的违规行是:
var audio = new Audio();
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中运行它时,当然可以正常运行,但由于它是原生HTML5元素,因此PhantomJS似乎无法识别它.
有谁知道我怎么解决这个问题?
PhantomJS 1.9.x 不支持 HTML5的视频和音频标签.似乎v2.0 也没有.
但是您可以通过在测试中执行以下操作来轻松模拟它(我假设您使用的是Jasmine):
describe('My test', function() {
var audioOriginal, audioMock;
beforeEach(function() {
audioOriginal = window.Audio;
audioMock = {};
window.Audio = function() { return audioMock; });
});
afterEach(function() {
window.Audio = audioOriginal;
});
it('should call the play method', function() {
// Arrange
audioMock.play = jasmine.createSpy('play');
// Act
// Calls Audio.play() somehow
// Assert
expect(audioMock.play).toHaveBeenCalled();
});
});
Run Code Online (Sandbox Code Playgroud)
请注意,每次测试后都会恢复原始音频值.这很重要,因为我们正在更改window对象,这是全局的,如果我们不回滚该更改,那么依赖的其他测试Audio可能会中断.
| 归档时间: |
|
| 查看次数: |
3744 次 |
| 最近记录: |