`import { test, moduleForComponent } from 'ember-qunit'` `import Polling from 'travis/mixins/polling'` hookRuns = 0 pollingChangesHistory = [] # define component just for testing define('travis/components/polling-test', [], -> PollingService = Ember.Object.extend( startPolling: (model) -> pollingChangesHistory.push(type: 'start', model: model) stopPolling: (model) -> pollingChangesHistory.push(type: 'stop', model: model) startPollingHook: (source) -> pollingChangesHistory.push(type: 'start-hook', source: source+'') stopPollingHook: (source) -> pollingChangesHistory.push(type: 'stop-hook', source: source+'') ) Ember.Component.extend(Polling, init: -> @_super.apply this, arguments @set('polling', PollingService.create()) pollModels: ['model1', 'model2'], pollHook: -> hookRuns += 1 toString: -> '' ) ) # I want to test this mixin in context of component, so I'm using # modelForComponent moduleForComponent 'polling-test', 'PollingMixin', { # specify the other units that are required for this test needs: [] setup: -> hookRuns = 0 pollingChangesHistory = [] } test 'it properly stops polling hook without any models', -> component = @subject(pollModels: null) @append() Ember.run -> component.destroy() expected = [ { type: 'start-hook', source: '' }, { type: 'stop-hook', source: '' } ] deepEqual pollingChangesHistory, expected test 'it works even if one of the model is null', -> component = @subject(model1: { name: 'model1' }) @append() Ember.run -> component.destroy() expected = [ { type: 'start', model: { name: 'model1' } }, { type: 'start-hook', source: '' } { type: 'stop', model: { name: 'model1' } }, { type: 'stop-hook', source: '' } ] deepEqual pollingChangesHistory, expected test 'it polls for both models if they are present', -> component = @subject(model1: { name: 'model1' }, model2: { name: 'model2' }) @append() Ember.run -> component.destroy() expected = [ { type: 'start', model: { name: 'model1' } }, { type: 'start', model: { name: 'model2' } }, { type: 'start-hook', source: '' } { type: 'stop', model: { name: 'model1' } }, { type: 'stop', model: { name: 'model2' } }, { type: 'stop-hook', source: '' } ] deepEqual pollingChangesHistory, expected test 'it detects model changes', -> component = @subject(model1: { name: 'foo' }) @append() Ember.run -> component.set('model1', { name: 'bar' }) Ember.run -> component.destroy() expected = [ { type: 'start', model: { name: 'foo' } }, { type: 'start-hook', source: '' } { type: 'stop', model: { name: 'foo' } }, { type: 'start', model: { name: 'bar' } }, { type: 'stop', model: { name: 'bar' } }, { type: 'stop-hook', source: '' } ] deepEqual pollingChangesHistory, expected