chai-backbone-rails 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -99,14 +99,32 @@ other objects as you see fit:
99
99
 
100
100
  ### Traits
101
101
 
102
- you can also use 'traits':
102
+ you can also use 'traits'.
103
+ Traits are flags that are set when the user calls create with the
104
+ factory name prefixed with terms separated by dashes.
103
105
 
104
- Factory.define 'user', (attributes = {}, traits...) ->
105
- if traits.indexOf('male') isnt -1
106
- attributes.gender = 'male'
106
+ Like: 'female-admin-user'
107
+
108
+ This will call the 'user' factory, and provide the terms 'female' and
109
+ 'admin' as traits for this user
110
+
111
+ this list is accessible in the factory callback using `this.traits`
112
+
113
+ There are 2 helper methods to help check if traits are set:
114
+
115
+ this.trait('returns', 'one', 'of', 'these', 'values')
116
+
117
+ and
118
+
119
+ this.hasTrait('admin') # returns a boolean value
120
+
121
+ Extended example:
122
+
123
+ Factory.define 'user', (attributes = {}) ->
124
+ attributes.gender = @trait('male', 'female') || 'male'
107
125
 
108
126
  returningClass = User
109
- if traits.indexOf('admin') isnt -1
127
+ if @hasTrait('admin')
110
128
  returningClass = AdminUser
111
129
 
112
130
  new returningClass attributes
@@ -114,6 +132,7 @@ you can also use 'traits':
114
132
  Factory.create 'user', name: 'Matthijs' # => new User name: 'Matthijs'
115
133
  Factory.create 'male-user', name: 'Matthijs' # => new User name: 'Matthijs', gender: 'male'
116
134
  Factory.create 'male-admin-user', name: 'Matthijs' # => new AdminUser name: 'Matthijs', gender: 'male'
135
+ Factory.create 'female-user', name: 'Beppie' # => new User name: 'Beppie', gender: 'female'
117
136
 
118
137
  ### Sequences
119
138
 
@@ -136,6 +155,15 @@ You can also yield results:
136
155
  Factory.create('abc') => 'a'
137
156
  Factory.create('abc') => 'b'
138
157
 
158
+ ### Sampling
159
+
160
+ You can sample a value from a list
161
+
162
+ Factory.define 'sampler', ->
163
+ @sample 'a', 'b', 'c'
164
+
165
+ Will randomly return a, b or c every time
166
+
139
167
  Running the tests
140
168
  =================
141
169
 
@@ -1,7 +1,7 @@
1
1
  module Chai
2
2
  module Backbone
3
3
  module Rails
4
- VERSION = "0.2.1"
4
+ VERSION = "0.3.0"
5
5
  end
6
6
  end
7
7
  end
@@ -79,6 +79,8 @@
79
79
  Backbone.history = new Backbone.History
80
80
 
81
81
  spy = sinon.spy router, methodName # spy on our expected method call
82
+ @assert router._bindRoutes?, 'provided router is not a Backbone.Router'
83
+
82
84
  router._bindRoutes() # inject router routes into our history
83
85
  if options.considering? # if multiple routers are provided load their routes aswell
84
86
  consideredRouter._bindRoutes() for consideredRouter in options.considering
@@ -19,14 +19,30 @@ window.Factory =
19
19
  @factories[factoryName] =
20
20
  sequences: {}
21
21
  factory: builder
22
- sequence: sequencer
23
22
 
24
- create: (nameWithTraits, options) ->
23
+ create: (nameWithTraits, args...) ->
25
24
  traits = nameWithTraits.split '-'
26
25
  factoryName = traits.pop()
27
26
  unless @factories[factoryName]?
28
27
  throw "Factory #{factoryName} does not exist"
29
- @factories[factoryName].factory options, traits...
28
+
29
+ f = @factories[factoryName]
30
+ obj =
31
+ sequences: f.sequences
32
+ factory: f.factory
33
+ sequence: sequencer
34
+ traits: traits
35
+ hasTrait: (name) -> ~@traits.indexOf(name)
36
+ trait: (names...) ->
37
+ for name in @traits
38
+ return name if ~names.indexOf(name)
39
+ sample: (values...) ->
40
+ values[Math.floor(Math.random() * values.length)]
41
+
42
+ r = obj.factory args...
43
+ f.sequences = obj.sequences
44
+ obj = null
45
+ r
30
46
 
31
47
  resetFactories: ->
32
48
  @factories = []
@@ -3,8 +3,8 @@
3
3
  describe 'Factory', ->
4
4
 
5
5
  beforeEach ->
6
- Factory.define 'user', (options = {}, traits...) ->
7
- [options, traits]
6
+ Factory.define 'user', (args...) ->
7
+ args: args
8
8
 
9
9
  afterEach ->
10
10
  Factory.resetFactories()
@@ -13,8 +13,7 @@ describe 'Factory', ->
13
13
 
14
14
  it 'registers a factory', ->
15
15
  result = Factory.create 'user'
16
- result[0].should.deep.equal {}
17
- result[1].should.deep.equal []
16
+ result.args.should.deep.equal []
18
17
 
19
18
  it 'raises an error on existing factory', ->
20
19
  expect(-> Factory.define('user', ->)).to.throw 'Factory user is already defined'
@@ -28,25 +27,61 @@ describe 'Factory', ->
28
27
  result = Factory.create 'user'
29
28
  hello: 'world'
30
29
  other: 'value'
31
- result[0].should.deep.equal { hello: 'world', other: 'value' }
30
+ result.args[0].should.deep.equal { hello: 'world', other: 'value' }
32
31
 
33
- it 'delivers traits to the callback', ->
34
- result = Factory.create 'male-admin-user'
35
- result[1].should.deep.equal ['male', 'admin']
32
+ it 'accepts multiple arguments', ->
33
+ result = Factory.create 'user', 1, 2, 3
34
+ result.args.should.deep.equal [1, 2, 3]
36
35
 
37
36
 
38
37
  describe 'helpers', ->
39
38
 
39
+ describe 'traits', ->
40
+ beforeEach ->
41
+ Factory.define 'traits', ->
42
+ traits: @traits
43
+
44
+ it 'delivers traits to the callback', ->
45
+ result = Factory.create 'something-with-traits'
46
+ result.traits.should.deep.equal ['something', 'with']
47
+
48
+ describe '#hasTrait', ->
49
+
50
+ it 'checks if trait is set', ->
51
+ Factory.define 'hasTrait', ->
52
+ @hasTrait('hello')
53
+
54
+ Factory.create('hello-hasTrait').should.be.ok
55
+ Factory.create('bye-hasTrait').should.not.be.ok
56
+ Factory.create('bye-other-hello-somewhere-hasTrait').should.be.ok
57
+
58
+ describe '#trait', ->
59
+
60
+ beforeEach ->
61
+ Factory.define 'trait', ->
62
+ @trait('red', 'green', 'refactor')
63
+
64
+ it 'returns undefined if no values match', ->
65
+ expect(Factory.create('refgreen-trait')).to.be.undefined
66
+
67
+ it 'returns one of the provided trait values', ->
68
+ Factory.create('green-trait').should.equal 'green'
69
+ Factory.create('red-trait').should.equal 'red'
70
+
71
+ it 'returns the first encountered if multiple values match', ->
72
+ Factory.create('green-red-trait').should.equal 'green'
73
+ Factory.create('refactor-green-trait').should.equal 'refactor'
74
+
40
75
  describe 'sequence', ->
41
76
 
42
77
  beforeEach ->
43
- Factory.define 'counter', (options = {}, traits...) ->
78
+ Factory.define 'counter', ->
44
79
  @sequence('property')
45
80
 
46
- Factory.define 'otherCounter', (options = {}, traits...) ->
81
+ Factory.define 'otherCounter', ->
47
82
  @sequence('property')
48
83
 
49
- Factory.define 'abc', (options = {}, traits...) ->
84
+ Factory.define 'abc', ->
50
85
  @sequence((c) -> ['a', 'b', 'c'][c])
51
86
 
52
87
  it 'provides sequencers scoped to factory and property', ->
@@ -58,3 +93,20 @@ describe 'Factory', ->
58
93
  Factory.create('abc').should.equal 'a'
59
94
  Factory.create('abc').should.equal 'b'
60
95
 
96
+ describe 'sample', ->
97
+
98
+ beforeEach ->
99
+ Factory.define 'sampling', ->
100
+ @sample('henk', 'piet', 'kees')
101
+
102
+ afterEach ->
103
+ @mathStub?.restore()
104
+
105
+ it 'returns one of the provided values', ->
106
+ @mathStub = sinon.stub Math, 'random', -> 0.01
107
+ Factory.create('sampling').should.eql 'henk'
108
+
109
+ it 'uses random to decide value', ->
110
+ @mathStub = sinon.stub Math, 'random', -> 0.99
111
+ Factory.create('sampling').should.eql 'kees'
112
+
metadata CHANGED
@@ -1,23 +1,33 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: chai-backbone-rails
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Matthijs Groen
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-09-27 00:00:00.000000000 Z
17
+
18
+ date: 2012-09-30 00:00:00 Z
13
19
  dependencies: []
20
+
14
21
  description: Chai.js matchers for Backbone.js framework
15
- email:
22
+ email:
16
23
  - matthijs.groen@gmail.com
17
24
  executables: []
25
+
18
26
  extensions: []
27
+
19
28
  extra_rdoc_files: []
20
- files:
29
+
30
+ files:
21
31
  - .gitignore
22
32
  - Gemfile
23
33
  - LICENSE
@@ -38,26 +48,36 @@ files:
38
48
  - vendor/assets/javascripts/spec/factory_spec.js.coffee
39
49
  homepage: https://github.com/matthijsgroen/chai-backbone-rails
40
50
  licenses: []
51
+
41
52
  post_install_message:
42
53
  rdoc_options: []
43
- require_paths:
54
+
55
+ require_paths:
44
56
  - lib
45
- required_ruby_version: !ruby/object:Gem::Requirement
57
+ required_ruby_version: !ruby/object:Gem::Requirement
46
58
  none: false
47
- requirements:
48
- - - ! '>='
49
- - !ruby/object:Gem::Version
50
- version: '0'
51
- required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
67
  none: false
53
- requirements:
54
- - - ! '>='
55
- - !ruby/object:Gem::Version
56
- version: '0'
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
57
75
  requirements: []
76
+
58
77
  rubyforge_project:
59
- rubygems_version: 1.8.24
78
+ rubygems_version: 1.8.15
60
79
  signing_key:
61
80
  specification_version: 3
62
81
  summary: A set of assertion matchers to test Backbone code using Konacha in Rails
63
82
  test_files: []
83
+