On the shoulders of giants, that is.
While "a poor craftsman blames his tools", sometimes those tools lead you down the garden path to such a degree that you don't realise that you're doing a Wile E Coyote impersonation until about the third bounce off the canyon floor. For your amusement and edification, if not abject stupefaction, I present a subset of a passing spec file. This is CoffeeScript, using teaspoon and mocha for specs. It's deceptively straightforward, IMAO:
#= require 'gateway'
describe 'Gateway class', ->
beforeEach ->
@subject = new window.meldd.Gateway()
@name = 'foo'
@value = $('body')
# other specs elided...
describe 'has a "useGroup" method that', ->
it 'takes one parameter', ->
expect(@subject.useGroup).to.have.length 1
describe 'when called using', ->
it 'a nonexistent group name, returns an empty object hash', ->
group = @subject.useGroup 'not found'
expect(group).to.be.an 'object'
expect(group).to.be.empty()
describe 'a group with one key, returns an object', ->
beforeEach ->
@subject.register 'foo', 'bar', 'group1'
@group = @subject.useGroup 'group1'
it 'hash', ->
expect(@group).to.be.an 'object'
it 'with the correct single item name as the only key', ->
expect(@subject.groups['group1'][0]).to == 'bar'
expect(Object.keys(@group)).to == ['foo']
it 'with the correct item value as the only value', ->
expect(@group['foo']).to == 'bar'
describe 'two groups with one identical key, returns', ->
beforeEach ->
@subject.register 'this', @, 'group1', 'group2'
@group1 = @subject.useGroup 'group1'
@group2 = @subject.useGroup 'group2'
it 'the identical object in both groups', ->
# equality to avoid "Converting circular structure to JSON" error
expect(@group1['this']).to == @
expect(@group2['this']).to == @
# identity; they're the exact same object instance
expect(@group1['this']).to.be @group2['this']
Pretty straightforward, and both of you Scripters reading this can probably code up a proper Gateway.useGroup method without knowing much about the rest of the class. I'd bet the rent that your method would not closely resemble this:
useGroup: (param) ->
{}
And yet...
What. The. Fox?!?
No comments:
Post a Comment