diff --git a/test-support/helpers/sl/synchronous/global-libraries.js b/test-support/helpers/sl/synchronous/global-libraries.js index 297ea1b..f0dd89e 100644 --- a/test-support/helpers/sl/synchronous/global-libraries.js +++ b/test-support/helpers/sl/synchronous/global-libraries.js @@ -4,18 +4,40 @@ import sinon from 'sinon'; export let called; export let jqueryAliasSpy; export let jquerySpy; -export let emberJquery; +export let emberJquerySpy; export function setupSpies() { jqueryAliasSpy = sinon.spy( window, '$' ); jquerySpy = sinon.spy( window, 'jQuery' ); - emberJquery = sinon.spy( Ember, '$' ); + emberJquerySpy = sinon.spy( Ember, '$' ); } -export function restoreSpies() { - called = jqueryAliasSpy.called || jquerySpy.called || emberJquery.called; +export function triggerEvents( component ) { + Ember.run(() => { + [ + 'willInsertElement', + 'didInsertElement', + 'willClearRender', + 'willDestroyElement' + ].map(( event ) => { + component.trigger( event ); + }); + }); +} + +export function called() { + return jqueryAliasSpy.called || jquerySpy.called || emberJquerySpy.called; +} +export function restoreSpies() { window.$.restore(); window.jQuery.restore(); Ember.$.restore(); } + +export function resetSpies() { + jqueryAliasSpy.reset(); + jquerySpy.reset(); + emberJquerySpy.reset(); +} + diff --git a/tests/unit/helpers/sl/synchronous/global-libaries-test.js b/tests/unit/helpers/sl/synchronous/global-libaries-test.js index a2a2740..d2cf1e3 100644 --- a/tests/unit/helpers/sl/synchronous/global-libaries-test.js +++ b/tests/unit/helpers/sl/synchronous/global-libaries-test.js @@ -1,5 +1,7 @@ +import Ember from 'ember'; import { test } from 'ember-qunit'; import * as globalLibraries from '../../../../helpers/sl/synchronous/global-libraries'; +import sinon from 'sinon'; module( 'Unit | Helpers | sl/synchronous/global-libraries' ); @@ -10,14 +12,81 @@ test( 'it exists', function( assert ) { ); }); -test( 'Functions as expected', function( assert ) { +test( 'Passes when global libraries are not referenced', function( assert ) { + const component = Ember.Object.extend().create({ + trigger: function() {} + }); + globalLibraries.setupSpies(); + globalLibraries.triggerEvents( component ); + + assert.notOk( + globalLibraries.called() + ); + globalLibraries.restoreSpies(); +}); + +test( 'triggerEvents triggers respective events', function( assert ) { + const events = { + 'willInsertElement': sinon.spy() , + 'didInsertElement': sinon.spy() , + 'willClearRender': sinon.spy() , + 'willDestroyElement': sinon.spy() + }; + + const component = { + trigger: function( eventName ) { + this.events[ eventName ](); + }, + + events + }; + + globalLibraries.triggerEvents( component ); - assert.equal( - globalLibraries.called, - false, - 'There are no references to Ember.$, $ or jQuery' + Object.keys( events ).forEach(( eventName ) => { + const spy = events[ eventName ]; + assert.ok( + spy.called, + `${ eventName } was triggered` + ); + }); +}); + +test( 'called() returns true when $ is referenced', function( assert ) { + globalLibraries.setupSpies(); + + window.$(); + + assert.ok( + globalLibraries.called() ); + + globalLibraries.restoreSpies(); +}); + +test( 'called() returns true when jQuery is referenced', function( assert ) { + globalLibraries.setupSpies(); + + window.jQuery(); + + assert.ok( + globalLibraries.called() + ); + + globalLibraries.restoreSpies(); +}); + +test( 'called() returns true when Ember.$ is referenced', function( assert ) { + globalLibraries.setupSpies(); + + Ember.$(); + + assert.ok( + globalLibraries.called() + ); + + globalLibraries.restoreSpies(); });