Add unit tests for the navigation bar slide gesture
The slide gesture is enabled or disabled depending on the width of the browser window. In order to easily control that width the karma-viewport plugin is now used in the unit tests. Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
parent
b19b137969
commit
173f28a09d
|
@ -22,6 +22,7 @@
|
||||||
"karma-jasmine-sinon": "^1.0.4",
|
"karma-jasmine-sinon": "^1.0.4",
|
||||||
"karma-junit-reporter": "*",
|
"karma-junit-reporter": "*",
|
||||||
"karma-phantomjs-launcher": "*",
|
"karma-phantomjs-launcher": "*",
|
||||||
|
"karma-viewport": "^0.4.2",
|
||||||
"phantomjs-prebuilt": "*",
|
"phantomjs-prebuilt": "*",
|
||||||
"node-sass": "~4.1.1",
|
"node-sass": "~4.1.1",
|
||||||
"sinon": "*"
|
"sinon": "*"
|
||||||
|
|
|
@ -1112,4 +1112,108 @@ describe('Core base tests', function() {
|
||||||
expect(OC._ajaxConnectionLostHandler.calls.count()).toBe(1);
|
expect(OC._ajaxConnectionLostHandler.calls.count()).toBe(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe('Snapper', function() {
|
||||||
|
var snapConstructorStub;
|
||||||
|
var snapperStub;
|
||||||
|
var clock;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
snapConstructorStub = sinon.stub(window, 'Snap');
|
||||||
|
|
||||||
|
snapperStub = {};
|
||||||
|
snapperStub.enable = sinon.stub();
|
||||||
|
snapperStub.disable = sinon.stub();
|
||||||
|
snapperStub.close = sinon.stub();
|
||||||
|
|
||||||
|
snapConstructorStub.returns(snapperStub);
|
||||||
|
|
||||||
|
clock = sinon.useFakeTimers();
|
||||||
|
|
||||||
|
// _.now could have been set to Date.now before Sinon replaced it
|
||||||
|
// with a fake version, so _.now must be stubbed to ensure that the
|
||||||
|
// fake Date.now will be called instead of the original one.
|
||||||
|
_.now = sinon.stub(_, 'now').callsFake(function() {
|
||||||
|
return new Date().getTime();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#testArea').append('<div id="app-navigation">The navigation bar</div><div id="app-content">Content</div>');
|
||||||
|
});
|
||||||
|
afterEach(function() {
|
||||||
|
snapConstructorStub.restore();
|
||||||
|
|
||||||
|
clock.restore();
|
||||||
|
|
||||||
|
_.now.restore();
|
||||||
|
|
||||||
|
// Remove the event handler for the resize event added to the window
|
||||||
|
// due to calling window.initCore() when there is an #app-navigation
|
||||||
|
// element.
|
||||||
|
$(window).off('resize');
|
||||||
|
|
||||||
|
viewport.reset();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('is enabled on a narrow screen', function() {
|
||||||
|
viewport.set(480);
|
||||||
|
|
||||||
|
window.initCore();
|
||||||
|
|
||||||
|
expect(snapConstructorStub.calledOnce).toBe(true);
|
||||||
|
expect(snapperStub.enable.calledOnce).toBe(true);
|
||||||
|
expect(snapperStub.disable.called).toBe(false);
|
||||||
|
});
|
||||||
|
it('is disabled on a wide screen', function() {
|
||||||
|
viewport.set(1280);
|
||||||
|
|
||||||
|
window.initCore();
|
||||||
|
|
||||||
|
expect(snapConstructorStub.calledOnce).toBe(true);
|
||||||
|
expect(snapperStub.enable.called).toBe(false);
|
||||||
|
expect(snapperStub.disable.calledOnce).toBe(true);
|
||||||
|
});
|
||||||
|
it('is enabled when resizing to a narrow screen', function() {
|
||||||
|
viewport.set(1280);
|
||||||
|
|
||||||
|
window.initCore();
|
||||||
|
|
||||||
|
expect(snapperStub.enable.called).toBe(false);
|
||||||
|
expect(snapperStub.disable.calledOnce).toBe(true);
|
||||||
|
|
||||||
|
viewport.set(480);
|
||||||
|
|
||||||
|
// Setting the viewport width does not automatically trigger a
|
||||||
|
// resize.
|
||||||
|
$(window).resize();
|
||||||
|
|
||||||
|
// The resize handler is debounced to be executed a few milliseconds
|
||||||
|
// after the resize event.
|
||||||
|
clock.tick(1000);
|
||||||
|
|
||||||
|
expect(snapperStub.enable.calledOnce).toBe(true);
|
||||||
|
expect(snapperStub.disable.calledOnce).toBe(true);
|
||||||
|
});
|
||||||
|
it('is disabled when resizing to a wide screen', function() {
|
||||||
|
viewport.set(480);
|
||||||
|
|
||||||
|
window.initCore();
|
||||||
|
|
||||||
|
expect(snapperStub.enable.calledOnce).toBe(true);
|
||||||
|
expect(snapperStub.disable.called).toBe(false);
|
||||||
|
expect(snapperStub.close.called).toBe(false);
|
||||||
|
|
||||||
|
viewport.set(1280);
|
||||||
|
|
||||||
|
// Setting the viewport width does not automatically trigger a
|
||||||
|
// resize.
|
||||||
|
$(window).resize();
|
||||||
|
|
||||||
|
// The resize handler is debounced to be executed a few milliseconds
|
||||||
|
// after the resize event.
|
||||||
|
clock.tick(1000);
|
||||||
|
|
||||||
|
expect(snapperStub.enable.calledOnce).toBe(true);
|
||||||
|
expect(snapperStub.disable.calledOnce).toBe(true);
|
||||||
|
expect(snapperStub.close.calledOnce).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -237,7 +237,7 @@ module.exports = function(config) {
|
||||||
basePath: '..',
|
basePath: '..',
|
||||||
|
|
||||||
// frameworks to use
|
// frameworks to use
|
||||||
frameworks: ['jasmine', 'jasmine-sinon'],
|
frameworks: ['jasmine', 'jasmine-sinon', 'viewport'],
|
||||||
|
|
||||||
// list of files / patterns to load in the browser
|
// list of files / patterns to load in the browser
|
||||||
files: files,
|
files: files,
|
||||||
|
|
Loading…
Reference in New Issue