visionmedia-jspec 2.2.1 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.rdoc CHANGED
@@ -1,4 +1,10 @@
1
1
 
2
+ === 2.3.0 / 2009-06-25
3
+
4
+ * Added stub()
5
+ * Added destub()
6
+ * Changed; Server responses utilize Rack::Mime now for arbitrary requests
7
+
2
8
  === 2.2.1 / 2009-06-22
3
9
 
4
10
  * Changed; reportToServer() now accepts url arg
data/README.rdoc CHANGED
@@ -26,6 +26,7 @@ and much more.
26
26
  * Great looking default DOM theme
27
27
  * `jspec` command-line utility for auto-running specs, and initializing project templates
28
28
  * Proxy or 'Spy' assertions
29
+ * Method Stubbing
29
30
  * Shared behaviors
30
31
  * Profiling
31
32
  * Rails Integration (http://github.com/bhauman/jspec-rails)
@@ -202,6 +203,22 @@ how other methods may interact with it. Below is another example:
202
203
 
203
204
  For more examples view spec/spec.matchers.js
204
205
 
206
+ == Method Stubbing
207
+
208
+ JSpec currently provides very simple stubbing support shown below:
209
+
210
+ person = { toString : function(){ return '<Person>' } }
211
+ stub(person, 'toString').and_return('Ive been stubbed!')
212
+
213
+ To destub a method simply call destub() at any time:
214
+
215
+ destub(person, 'toString')
216
+
217
+ If you would like to whipe an object clear of stubs simply pass it
218
+ to destub() without an additional method argument:
219
+
220
+ destub(person)
221
+
205
222
  == Helpers
206
223
 
207
224
  * Core
@@ -452,6 +469,9 @@ Run with:
452
469
 
453
470
  * Tabs may cause a parse error. To prevent this use 'soft tabs' (setting in your IDE/Editor)
454
471
  or use JSpec's grammar-less alternative (mentioned above).
472
+
473
+ * The negation of the should_receive matcher is currently not available. (ex:
474
+ foo.should.not.receive('toString()') will not work)
455
475
 
456
476
  == More Information
457
477
 
data/bin/jspec CHANGED
@@ -10,7 +10,7 @@ require 'fileutils'
10
10
  RHINO = 'java org.mozilla.javascript.tools.shell.Main'
11
11
 
12
12
  program :name, 'JSpec'
13
- program :version, '2.2.1'
13
+ program :version, '2.3.0'
14
14
  program :description, 'JavaScript BDD Testing Framework'
15
15
  default_command :bind
16
16
 
data/jspec.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{jspec}
5
- s.version = "2.2.1"
5
+ s.version = "2.3.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["TJ Holowaychuk"]
9
- s.date = %q{2009-06-22}
9
+ s.date = %q{2009-06-25}
10
10
  s.default_executable = %q{jspec}
11
11
  s.description = %q{JavaScript BDD Testing Framework}
12
12
  s.email = %q{tj@vision-media.ca}
data/lib/jspec.js CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  JSpec = {
7
7
 
8
- version : '2.2.1',
8
+ version : '2.3.0',
9
9
  suites : [],
10
10
  allSuites : [],
11
11
  matchers : {},
@@ -896,6 +896,50 @@
896
896
  })
897
897
  return memo
898
898
  },
899
+
900
+ /**
901
+ * Destub _object_'s _method_. When no _method_ is passed
902
+ * all stubbed methods are destubbed.
903
+ *
904
+ * @param {mixed} object
905
+ * @param {string} method
906
+ * @api public
907
+ */
908
+
909
+ destub : function(object, method) {
910
+ if (method) {
911
+ if (object['__prototype__' + method])
912
+ delete object[method]
913
+ else
914
+ object[method] = object['__original__' + method]
915
+ delete object['__prototype__' + method]
916
+ delete object['__original____' + method]
917
+ }
918
+ else
919
+ for (var key in object)
920
+ if (captures = key.match(/^(?:__prototype__|__original__)(.*)/))
921
+ destub(object, captures[1])
922
+ },
923
+
924
+ /**
925
+ * Stub _object_'s _method_. Example:
926
+ * stub(foo, 'toString').and_return('bar')
927
+ *
928
+ * @param {mixed} object
929
+ * @param {string} method
930
+ * @return {hash}
931
+ * @api public
932
+ */
933
+
934
+ stub : function(object, method) {
935
+ return {
936
+ and_return : function(result) {
937
+ var type = object.hasOwnProperty(method) ? '__original__' : '__prototype__'
938
+ object[type + method] = object[method]
939
+ object[method] = function(){ return result }
940
+ }
941
+ }
942
+ },
899
943
 
900
944
  /**
901
945
  * Map callback return values.
@@ -1272,6 +1316,8 @@
1272
1316
  // --- Utility functions
1273
1317
 
1274
1318
  var main = this
1319
+ var stub = JSpec.stub
1320
+ var destub = JSpec.destub
1275
1321
  var map = JSpec.map
1276
1322
  var any = JSpec.any
1277
1323
  var find = JSpec.any
@@ -1424,5 +1470,4 @@
1424
1470
  }
1425
1471
  })
1426
1472
 
1427
- })()
1428
-
1473
+ })()
data/server/server.rb CHANGED
@@ -25,13 +25,10 @@ module JSpec
25
25
  'close'
26
26
  when /jspec/
27
27
  type = 'application/javascript'
28
- File.read File.join(JSPEC_ROOT, 'lib', File.basename(request.path_info))
29
- when /\.js/
30
- type = 'application/javascript'
31
- File.read File.join(root, request.path_info)
32
- else
33
- type = 'text/html'
34
- File.read File.join(root, request.path_info) rescue ''
28
+ File.read File.join(JSPEC_ROOT, 'lib', File.basename(path))
29
+ else
30
+ type = Rack::Mime.mime_type File.extname(path)
31
+ File.read File.join(root, path) rescue ''
35
32
  end
36
33
  [200, { 'Content-Type' => type, 'Content-Length' => body.length.to_s }, body]
37
34
  end
data/spec/spec.utils.js CHANGED
@@ -1,6 +1,43 @@
1
1
 
2
2
  describe 'Utility'
3
- describe 'query'
3
+ describe 'stubbing'
4
+ before_each
5
+ Object.prototype.stubby = function() { return 'Not stubbed' }
6
+ object = { toString : function() { return '<Im an object>' }}
7
+ stub(object, 'stubby').and_return('Im stubbed')
8
+ stub(object, 'toString').and_return('<No im not>')
9
+ end
10
+
11
+ describe 'stub()'
12
+ it 'should stub :)'
13
+ object.stubby().should.eql 'Im stubbed'
14
+ object.toString().should.eql '<No im not>'
15
+ end
16
+ end
17
+
18
+ describe 'destub()'
19
+ it 'should restore old methods'
20
+ destub(object, 'toString')
21
+ destub(object, 'stubby')
22
+ object.toString().should.eql '<Im an object>'
23
+ object.stubby().should.eql 'Not stubbed'
24
+ end
25
+
26
+ it 'should restore prototypal methods'
27
+ Object.prototype.stubby = function() { return 'Oh no im new' }
28
+ destub(object, 'stubby')
29
+ object.stubby().should.eql 'Oh no im new'
30
+ end
31
+
32
+ it 'should with a single argument should destub all methods stubbed related to the object passed'
33
+ destub(object)
34
+ object.toString().should.eql '<Im an object>'
35
+ object.stubby().should.eql 'Not stubbed'
36
+ end
37
+ end
38
+ end
39
+
40
+ describe 'query()'
4
41
  it 'should return a pairs value'
5
42
  query('suite', '?suite=Positive%20specs').should.equal 'Positive specs'
6
43
  end
@@ -10,7 +47,7 @@ describe 'Utility'
10
47
  end
11
48
  end
12
49
 
13
- describe 'strip'
50
+ describe 'strip()'
14
51
  it 'should strip whitespace by default'
15
52
  strip(" foo \n\n").should.equal 'foo'
16
53
  end
@@ -20,7 +57,7 @@ describe 'Utility'
20
57
  end
21
58
  end
22
59
 
23
- describe 'each'
60
+ describe 'each()'
24
61
  it 'should iterate an array'
25
62
  result = []
26
63
  each([1,2,3], function(value){
@@ -38,7 +75,7 @@ describe 'Utility'
38
75
  end
39
76
  end
40
77
 
41
- describe 'map'
78
+ describe 'map()'
42
79
  it 'should return an array of mapped values'
43
80
  result = map([1,2,3], function(value){
44
81
  return value * 2
@@ -54,7 +91,7 @@ describe 'Utility'
54
91
  end
55
92
  end
56
93
 
57
- describe 'inject'
94
+ describe 'inject()'
58
95
  it 'should provide a memo object while iterating, not expecting returning of memo for composits'
59
96
  result = inject([1,2,3], [], function(memo, value){
60
97
  memo.push(value)
@@ -70,7 +107,7 @@ describe 'Utility'
70
107
  end
71
108
  end
72
109
 
73
- describe 'any'
110
+ describe 'any()'
74
111
  it 'should return null when no matches are found'
75
112
  result = any('some foo bar', function(value){
76
113
  return value.length > 5
@@ -86,7 +123,7 @@ describe 'Utility'
86
123
  end
87
124
  end
88
125
 
89
- describe 'select'
126
+ describe 'select()'
90
127
  it 'should return an array of values when the callback evaluates to true'
91
128
  result = select('some foo bar baz stuff', function(value){
92
129
  return value.length > 3
@@ -95,13 +132,13 @@ describe 'Utility'
95
132
  end
96
133
  end
97
134
 
98
- describe 'last'
135
+ describe 'last()'
99
136
  it 'should return the last element in an array'
100
137
  last(['foo', 'bar']).should.eql 'bar'
101
138
  end
102
139
  end
103
140
 
104
- describe 'argumentsToArray'
141
+ describe 'argumentsToArray()'
105
142
  it 'should return an array of arguments'
106
143
  func = function(){ return argumentsToArray(arguments) }
107
144
  func('foo', 'bar').should.eql ['foo', 'bar']
@@ -113,14 +150,14 @@ describe 'Utility'
113
150
  end
114
151
  end
115
152
 
116
- describe 'does'
153
+ describe 'does()'
117
154
  it 'should assert without reporting'
118
155
  does('foo', 'eql', 'foo')
119
156
  JSpec.currentSpec.assertions.should.have_length 0
120
157
  end
121
158
  end
122
159
 
123
- describe 'contentsOf'
160
+ describe 'contentsOf()'
124
161
  it 'should return a function body'
125
162
  JSpec.contentsOf(-{ return 'foo' }).should.include 'return', 'foo'
126
163
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: visionmedia-jspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TJ Holowaychuk
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-22 00:00:00 -07:00
12
+ date: 2009-06-25 00:00:00 -07:00
13
13
  default_executable: jspec
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency