我正在为一段遗留Javascript编写一些Jasmine测试。代码使用Slick.js并在其中包含以下事件处理程序:
display.on('afterChange', function(event, slick, currentSlide) {
$currentSlide = jQuery(slick.$slides[currentSlide]);
if ($currentSlide.hasClass('video')) {
$currentSlide.find('video')[0].play();
}
});
display
是一个Slick轮播,因此在当前幻灯片更改后,我们要检查是否存在特定的类,如果找到它,请尝试在其中播放视频元素。
我希望能够测试在视频上触发幻灯片转换时,会导致视频自动播放。
我有以下内容:
it("should autoplay a video when you click the thumbnail", function(done) {
var thumb = mediaThumbnailFor(this.richMediaVideo.id, this.modal);
var videoContainer = mediaDisplayFor(this.richMediaVideo.id, this.modal);
var video = $('video', videoContainer)[0];
thumb.trigger('click', function() {
done();
expect(video.paused).toEqual(false);
});
});
在此实例中单击thumb
将触发正确的代码路径,但我无法通过预期。上面的代码在done()
被解雇之前超时。
我也想尽可能多地忽略实现细节,所以我试图不在测试中引用Slick,理想情况下我不想对现有的实现做任何改动(直到我有一个正常运行的测试用例)。
我是否采用了正确的方法进行此测试?还有更好的方法吗?