I have this: https://jsfiddle.net/xs5wenbv/1/
describe("videoPlayer tests", function() {
let player = {};
function removeIframeScripts() {
const scripts = document.querySelectorAll("script");
scripts.forEach(function removeScript(script) {
const url = script.getAttribute("src");
if (url === "https://www.youtube.com/iframe_api") {
script.remove();
}
});
}
function createVideo() {
const video = document.createElement("video");
video.classList.add("video");
return video;
}
function stubYT(iframe) {
window.YT = {
Player: function makePlayer(video, config) {
player = {
h: iframe,
i: {
h: config
},
m: video
};
return player;
}
};
}
function triggerAfterPlayerReady(el) {
const afterPlayerReadyEvent = new CustomEvent("afterPlayerReady");
el.dispatchEvent(afterPlayerReadyEvent);
}
describe("init", function() {
let iframe;
beforeEach(function() {
removeIframeScripts();
iframe = document.createElement("iframe");
stubYT(iframe);
});
it("makes onYouTubeIframeAPIReady available", function() {
videoPlayer.init();
expect(typeof window.onYouTubeIframeAPIReady).toBe("function");
});
it("loads iframe script", function() {
//given
removeIframeScripts();
//when
videoPlayer.init();
//then
const src = document.querySelector("script").src;
expect(src).toBe("https://www.youtube.com/iframe_api");
});
it("afterPlayerReady handler", function() {
//given
const spy = jasmine.createSpy("afterPlayerReady-handler");
videoPlayer.init({
afterPlayerReady: spy
});
const video = createVideo();
videoPlayer.addPlayer(video);
//when
triggerAfterPlayerReady(iframe);
//then
expect(spy).toHaveBeenCalled();
});
});
describe("addPlayer", function() {
let iframe;
let video;
beforeEach(function() {
removeIframeScripts();
iframe = document.createElement("iframe");
stubYT(iframe);
video = createVideo();
});
it("is called with the video element", function() {
//given
player = undefined;
//when
videoPlayer.addPlayer(video);
//then
expect(player.m.nodeName).toBe("VIDEO");
});
it("it has dimensions", function() {
//given
player = undefined;
//when
videoPlayer.addPlayer(video);
//then
expect(player.i.h.width).toBeGreaterThan(0);
});
it("it has playerVars", function() {
//given
player = undefined;
//when
videoPlayer.addPlayer(video);
//then
// expect(player.i.h.width).toBeGreaterThan(0);
});
});
});