chai-backbone-rails 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
+