Testing CloseButton Component Functionality in video.js
This test suite validates the CloseButton component functionality in Video.js, focusing on element creation, event handling, and keyboard interactions. The tests ensure proper button initialization, custom text configuration, and ESC key response.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
videojs/videoJs
test/unit/close-button.test.js
/* eslint-env qunit */
import CloseButton from '../../src/js/close-button';
import sinon from 'sinon';
import TestHelpers from './test-helpers';
const getMockEscapeEvent = () => ({
key: 'Escape',
which: 27,
preventDefault() {},
stopPropagation() {}
});
QUnit.module('CloseButton', {
beforeEach() {
this.player = TestHelpers.makePlayer();
this.btn = new CloseButton(this.player);
},
afterEach() {
this.player.dispose();
this.btn.dispose();
}
});
QUnit.test('should create the expected element', function(assert) {
const elAssertions = TestHelpers.assertEl(assert, this.btn.el(), {
tagName: 'button',
classes: [
'vjs-button',
'vjs-close-button',
'vjs-control'
]
});
assert.expect(elAssertions.count + 1);
elAssertions();
assert.strictEqual(this.btn.el().querySelector('.vjs-control-text').innerHTML, 'Close');
});
QUnit.test('should allow setting the controlText_ property as an option', function(assert) {
const text = 'OK!';
const btn = new CloseButton(this.player, {controlText: text});
assert.expect(1);
assert.strictEqual(btn.controlText_, text, 'set the controlText_ property');
btn.dispose();
});
QUnit.test('should trigger an event on activation', function(assert) {
const spy = sinon.spy();
this.btn.on('close', spy);
this.btn.trigger('click');
assert.expect(1);
assert.strictEqual(spy.callCount, 1, 'the "close" event was triggered');
});
QUnit.test('pressing ESC triggers close()', function(assert) {
const spy = sinon.spy();
this.btn.on('close', spy);
this.btn.handleKeyDown(getMockEscapeEvent());
assert.expect(1);
assert.strictEqual(spy.callCount, 1, 'ESC closed the modal');
});