spectacular
Version:
Advanced BDD framework for CoffeeScript and JavaScript
109 lines (76 loc) • 2.94 kB
text/coffeescript
sharedExample 'a collection like object', (options) ->
{singular, plural} = options
capitalizedSingular = spectacular.utils.capitalize singular
context 'adding an item', ->
given 'item', -> {}
given 'item2', -> {}
before -> @subject["add#{capitalizedSingular}"] @item
specify 'the collection', ->
@subject[plural].should contains @item
specify "then calling has#{capitalizedSingular}", ->
@subject["has#{capitalizedSingular}"](@item).should be true
specify 'the item index', ->
@subject["find#{capitalizedSingular}"](@item).should equal 0
specify 'the item at index 0', ->
@subject["#{singular}At"](0).should be @item
context 'then removing it', ->
before -> @subject["remove#{capitalizedSingular}"] @item
specify 'the collection', ->
@subject[plural].shouldnt contains @item
context 'removing an inexistant item', ->
before -> @subject["remove#{capitalizedSingular}"] @item2
specify 'the collection', ->
@subject[plural].should contains @item
class ClassWithCollection
@include spectacular.HasCollection 'children', 'child'
constructor: ->
@children = []
describe ClassWithCollection, ->
subject -> new ClassWithCollection
itBehavesLike 'a collection like object', {
singular: 'child'
plural: 'children'
}
describe spectacular.EventDispatcher, ->
given 'listener', ->
dummy = {foo: ->}
spyOn(dummy, 'foo')
dummy.foo
subject 'dispatcher', -> new spectacular.EventDispatcher
context 'when adding a listener', ->
before -> @dispatcher.on 'event', @listener
specify 'calling hasListener("event")', ->
@dispatcher.hasListener('event').should be true
context 'and then removing it', ->
before -> @dispatcher.off 'event', @listener
specify 'calling hasListener("event")', ->
@dispatcher.hasListener('event').should be false
context 'and then dispatching a message', ->
before -> @dispatcher.dispatch name: 'event', message: 'message'
subject -> @listener
specify 'the listener', -> should haveBeenCalled
class GlobalizableClass
@include spectacular.Globalizable
globalizable: ['test', 'testMethod', 'another_test_method']
test: ->
testMethod: ->
another_test_method: ->
describe GlobalizableClass, ->
subject -> new GlobalizableClass
context ' when globalized', ->
before -> @subject.globalize()
after -> @subject.unglobalize()
[
'test',
'testMethod',
'test_method',
'anotherTestMethod',
'another_test_method'
].forEach (method) ->
specify "the globalizable", ->
expect(method, spectacular.global[method]).to exist
describe 'HasNestedCollection', ->
subject -> spectacular.HasNestedCollection
context 'when called without options', ->
it -> should throwAnError().with 'foo'
it -> should throwAnError().with 'foo', {}