Files
edx-platform/cms/static/js/spec/views/baseview_spec.js
2016-08-08 15:04:06 -04:00

80 lines
3.6 KiB
JavaScript

define(['jquery', 'underscore', 'js/views/baseview', 'js/utils/handle_iframe_binding', 'sinon'],
function($, _, BaseView, IframeBinding, sinon) {
describe('BaseView', function() {
var baseViewPrototype;
describe('BaseView rendering', function() {
var iframeBinding_spy;
beforeEach(function() {
baseViewPrototype = BaseView.prototype;
iframeBinding_spy = sinon.spy(IframeBinding, 'iframeBinding');
spyOn(baseViewPrototype, 'initialize');
spyOn(baseViewPrototype, 'beforeRender');
spyOn(baseViewPrototype, 'render').and.callThrough();
spyOn(baseViewPrototype, 'afterRender').and.callThrough();
});
afterEach(function() {
iframeBinding_spy.restore();
});
it('calls before and after render functions when render of baseview is called', function() {
var baseView = new BaseView();
baseView.render();
expect(baseViewPrototype.initialize).toHaveBeenCalled();
expect(baseViewPrototype.beforeRender).toHaveBeenCalled();
expect(baseViewPrototype.render).toHaveBeenCalled();
expect(baseViewPrototype.afterRender).toHaveBeenCalled();
});
it('calls iframeBinding function when afterRender of baseview is called', function() {
var baseView = new BaseView();
baseView.render();
expect(baseViewPrototype.afterRender).toHaveBeenCalled();
expect(iframeBinding_spy.called).toEqual(true);
// check calls count of iframeBinding function
expect(iframeBinding_spy.callCount).toBe(1);
IframeBinding.iframeBinding();
expect(iframeBinding_spy.callCount).toBe(2);
});
});
describe('Expand/Collapse', function() {
var view, MockCollapsibleViewClass;
MockCollapsibleViewClass = BaseView.extend({
initialize: function() {
this.viewHtml = readFixtures('mock/mock-collapsible-view.underscore');
},
render: function() {
this.$el.html(this.viewHtml);
}
});
it('hides a collapsible node when clicking on the toggle link', function() {
view = new MockCollapsibleViewClass();
view.render();
view.$('.ui-toggle-expansion').click();
expect(view.$('.expand-collapse')).toHaveClass('expand');
expect(view.$('.expand-collapse')).not.toHaveClass('collapse');
expect(view.$('.is-collapsible')).toHaveClass('collapsed');
});
it('expands a collapsible node when clicking twice on the toggle link', function() {
view = new MockCollapsibleViewClass();
view.render();
view.$('.ui-toggle-expansion').click();
view.$('.ui-toggle-expansion').click();
expect(view.$('.expand-collapse')).toHaveClass('collapse');
expect(view.$('.expand-collapse')).not.toHaveClass('expand');
expect(view.$('.is-collapsible')).not.toHaveClass('collapsed');
});
});
});
});