(function() { if (typeof process === 'object') { require('mocha-jsdom')(); } var root = this; var assert = (root.chai || require('chai')).assert; describe('NProgress', function() { var $, NProgress; beforeEach(function() { $ = root.jQuery || require('jquery'); NProgress = root.NProgress || require('../nprogress'); this.settings = $.extend({}, NProgress.settings); }); afterEach(function() { $("#nprogress").remove(); $('html').attr('class', ''); NProgress.status = null; // Restore settings $.extend(NProgress.settings, this.settings); }); describe('.set()', function() { it('.set(0) must render', function(done) { NProgress.set(0); assert.equal($("#nprogress").length, 1); assert.equal($("#nprogress .bar").length, 1); assert.equal($("#nprogress .peg").length, 1); assert.equal($("#nprogress .spinner").length, 1); done(); }); it('.set(1) should appear and disappear', function(done) { NProgress.configure({ speed: 10 }); NProgress.set(0).set(1); assert.equal($("#nprogress").length, 1); setTimeout(function() { assert.equal($("#nprogress").length, 0); done(); }, 70); }); it('must respect minimum', function() { NProgress.set(0); assert.equal(NProgress.status, NProgress.settings.minimum); }); it('must clamp to minimum', function() { NProgress.set(-100); assert.equal(NProgress.status, NProgress.settings.minimum); }); it('must clamp to maximum', function() { NProgress.set(456); assert.equal(NProgress.status, null); }); }); // ---- describe('.start()', function() { it('must render', function(done) { NProgress.start(); assert.equal($("#nprogress").length, 1); done(); }); it('must respect minimum', function() { NProgress.start(); assert.equal(NProgress.status, NProgress.settings.minimum); }); it('must be attached to specified parent', function() { var test = $('
', {id: 'test'}).appendTo('body'); NProgress.configure({parent: '#test'}); NProgress.start(); assert.isTrue($("#nprogress").parent().is(test)); assert.isTrue($(NProgress.settings.parent).hasClass("nprogress-custom-parent")); }); }); // ---- describe('.done()', function() { it('must not render without start', function(done) { NProgress.done(); assert.equal($("#nprogress").length, 0); done(); }); it('.done(true) must render', function(done) { NProgress.done(true); assert.equal($("#nprogress").length, 1); done(); }); }); // ---- describe('.remove()', function() { it('should be removed from the parent', function() { NProgress.set(1); NProgress.remove(); var parent = $(NProgress.settings.parent); assert.isFalse(parent.hasClass('nprogress-custom-parent')); assert.equal(parent.find('#nprogress').length, 0); }); }); // ---- describe('.inc()', function() { it('should render', function() { NProgress.inc(); assert.equal($("#nprogress").length, 1); }); it('should start with minimum', function() { NProgress.inc(); assert.equal(NProgress.status, NProgress.settings.minimum); }); it('should increment', function() { NProgress.start(); var start = NProgress.status; NProgress.inc(); assert.operator(NProgress.status, '>', start); }); it('should never reach 1.0', function() { for (var i=0; i<100; ++i) { NProgress.inc(); } assert.operator(NProgress.status, '<', 1.0); }); }); // ----- describe('.configure()', function() { it('should work', function() { NProgress.configure({ minimum: 0.5 }); assert.equal(NProgress.settings.minimum, 0.5); }); }); // ---- describe('.configure(showSpinner)', function() { it('should render spinner by default', function() { NProgress.start(); assert.equal($("#nprogress .spinner").length, 1); }); it('should be true by default', function() { assert.equal(NProgress.settings.showSpinner, true); }); it('should hide (on false)', function() { NProgress.configure({ showSpinner: false }); NProgress.start(); assert.equal($("#nprogress .spinner").length, 0); }); }); }); })();