rspec 0.1.7 → 0.2.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/CHANGES +9 -0
- data/Rakefile.rb +2 -43
- data/TUTORIAL +259 -0
- data/examples/craps_spec.rb +2 -2
- data/lib/spec/text_runner.rb +1 -1
- metadata +4 -11
- data/test/craps_collector_test.rb +0 -17
- data/test/movie_collector_test.rb +0 -19
- data/test/rspec_craps_and_movie_test.rb +0 -32
- data/test/rspec_craps_test.rb +0 -35
- data/test/rspec_movie_test.rb +0 -33
- data/test/test_unit_ext_spec.rb +0 -9
data/CHANGES
CHANGED
@@ -13,6 +13,15 @@
|
|
13
13
|
* Make sure the PKG_VERSION constant in Rakefile.rb is
|
14
14
|
consistent with the latest version in this document.
|
15
15
|
|
16
|
+
== Version 0.2.0
|
17
|
+
|
18
|
+
This release provides a tutorial for new users wishing to get started with
|
19
|
+
RSpec, and many improvements.
|
20
|
+
|
21
|
+
* improved reporting in the spec runner output
|
22
|
+
* update the examples to the new mock api
|
23
|
+
* added TUTORIAL, a getting started document for new users of RSpec
|
24
|
+
|
16
25
|
== Version 0.1.7
|
17
26
|
|
18
27
|
This release improves installation and documentation, mock integration and error reporting.
|
data/Rakefile.rb
CHANGED
@@ -19,7 +19,7 @@ PKG_NAME = "rspec"
|
|
19
19
|
# (This is subject to change - AH)
|
20
20
|
#
|
21
21
|
# REMEMBER TO KEEP PKG_VERSION IN SYNC WITH CHANGELOG
|
22
|
-
PKG_VERSION = "0.
|
22
|
+
PKG_VERSION = "0.2.0"
|
23
23
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
24
24
|
PKG_FILES = FileList[
|
25
25
|
'[A-Z]*',
|
@@ -29,9 +29,7 @@ PKG_FILES = FileList[
|
|
29
29
|
'doc/**/*'
|
30
30
|
]
|
31
31
|
|
32
|
-
task :default => [:test, :
|
33
|
-
:test_rspec_craps, :test_rspec_movie, :test_rspec_craps_and_movie,
|
34
|
-
:test_text_runner]
|
32
|
+
task :default => [:test, :test_text_runner]
|
35
33
|
|
36
34
|
Rake::TestTask.new do |t|
|
37
35
|
t.libs << "test"
|
@@ -40,45 +38,6 @@ Rake::TestTask.new do |t|
|
|
40
38
|
t.verbose = true
|
41
39
|
end
|
42
40
|
|
43
|
-
# collector tests need to run individually
|
44
|
-
|
45
|
-
Rake::TestTask.new(:test_craps_collector) do |t|
|
46
|
-
t.libs << "test"
|
47
|
-
t.libs << "examples"
|
48
|
-
t.test_files = FileList['test/craps_collector_test.rb']
|
49
|
-
t.verbose = true
|
50
|
-
end
|
51
|
-
|
52
|
-
Rake::TestTask.new(:test_movie_collector) do |t|
|
53
|
-
t.libs << "test"
|
54
|
-
t.libs << "examples"
|
55
|
-
t.test_files = FileList['test/movie_collector_test.rb']
|
56
|
-
t.verbose = true
|
57
|
-
end
|
58
|
-
|
59
|
-
# rspec tests need to run individually
|
60
|
-
|
61
|
-
Rake::TestTask.new(:test_rspec_craps) do |t|
|
62
|
-
t.libs << "test"
|
63
|
-
t.libs << "examples"
|
64
|
-
t.test_files = FileList['test/rspec_craps_test.rb']
|
65
|
-
t.verbose = true
|
66
|
-
end
|
67
|
-
|
68
|
-
Rake::TestTask.new(:test_rspec_movie) do |t|
|
69
|
-
t.libs << "test"
|
70
|
-
t.libs << "examples"
|
71
|
-
t.test_files = FileList['test/rspec_movie_test.rb']
|
72
|
-
t.verbose = true
|
73
|
-
end
|
74
|
-
|
75
|
-
Rake::TestTask.new(:test_rspec_craps_and_movie) do |t|
|
76
|
-
t.libs << "test"
|
77
|
-
t.libs << "examples"
|
78
|
-
t.test_files = FileList['test/rspec_craps_and_movie_test.rb']
|
79
|
-
t.verbose = true
|
80
|
-
end
|
81
|
-
|
82
41
|
# text runner tests need to run individually
|
83
42
|
|
84
43
|
Rake::TestTask.new(:test_text_runner) do |t|
|
data/TUTORIAL
ADDED
@@ -0,0 +1,259 @@
|
|
1
|
+
= Getting Started with RSpec
|
2
|
+
|
3
|
+
RSpec is a behaviour specification framework for the Ruby Programming
|
4
|
+
Language. More information on the Ruby Programming Language can be found at
|
5
|
+
http://www.ruby-lang.org/. For more information on Behaviour Driven
|
6
|
+
Development, please see _A New Look at Test Driven Development_ which can be
|
7
|
+
found at http://www.daveastels.com/index.php?p=5.
|
8
|
+
|
9
|
+
This document is intended to help those interested in getting started with
|
10
|
+
Behaviour Driven Development using the RSpec behaviour specification
|
11
|
+
framework. Please send comments and/or corrections to me via email: srbaker at
|
12
|
+
pobox dot com.
|
13
|
+
|
14
|
+
== Installation
|
15
|
+
|
16
|
+
The first thing you need to do to start specifying your software is to install
|
17
|
+
RSpec. Thanks to the work on the Gem packaging of RSpec by Aslak Hellesoy, you
|
18
|
+
can install RSpec via RubyGems by issuing the following command:
|
19
|
+
|
20
|
+
$ gem install rspec
|
21
|
+
|
22
|
+
If you do not have RubyGems installed, see http://docs.rubygems.org/ for
|
23
|
+
information about RubyGems including how to install it.
|
24
|
+
|
25
|
+
== Usage
|
26
|
+
|
27
|
+
Once you have RSpec installed, ensure that it is correctly installed by
|
28
|
+
running the spec command from the command line without arguments. You should
|
29
|
+
get something like the following output:
|
30
|
+
|
31
|
+
Finished in 0.002726 seconds
|
32
|
+
|
33
|
+
0 specifications, 0 expectations, 0 failures
|
34
|
+
|
35
|
+
If you get this output, you can be sure that RSpec has been installed and is
|
36
|
+
ready for use!
|
37
|
+
|
38
|
+
= Specification Anatomy
|
39
|
+
|
40
|
+
== Expectations
|
41
|
+
|
42
|
+
The simplest part of your set of specifications will be an expectation. An
|
43
|
+
expectation tells RSpec what the expected result of a piece code is. Your set of
|
44
|
+
specifications is simply a collection of expectations about how your code should
|
45
|
+
behave.
|
46
|
+
|
47
|
+
In RSpec, the expectations are methods that are available on every object in the
|
48
|
+
system. If I want to set an expectation that the value of 1 is 1, I would write:
|
49
|
+
|
50
|
+
1.should_equal 1
|
51
|
+
|
52
|
+
And to set the expectation that 1 + 1 should be equal to 2, I would write the
|
53
|
+
following code:
|
54
|
+
|
55
|
+
(1 + 1).should_equal 2
|
56
|
+
|
57
|
+
There are many available expectation methods, and they can be found by looking
|
58
|
+
in the API documentation for RSpec. For most, if not all, of the expections
|
59
|
+
the negation is also provided. Thus, to ensure that subtracting 1 from 2 does
|
60
|
+
not equal 2, write the following:
|
61
|
+
|
62
|
+
(2 - 1).should_not_equal 2
|
63
|
+
|
64
|
+
These examples are extremely simple, but they accurately convey the simplicity
|
65
|
+
with which expectations can be written. When specifying your software, you are
|
66
|
+
simply writing expectations that specify how your software will behave. The rest
|
67
|
+
of the constructs in RSpec exist entirely to help you organize your
|
68
|
+
expectations, and to provide accurate and helpful reporting when these
|
69
|
+
expectations are not met.
|
70
|
+
|
71
|
+
Eventually, writing expectations for addition and subtraction of numbers will
|
72
|
+
get boring. When that happens, you can start writing expectations for your own
|
73
|
+
code. Let's try a slightly more involved example.
|
74
|
+
|
75
|
+
We have been asked to write a robot which will start at a given X, Y coordinate,
|
76
|
+
and will move in for directions a given number of units. If no starting
|
77
|
+
coordinate is given, the robot will start at 0,0. When the robot is moved, a
|
78
|
+
two-element array should be returned with the x and y coordinates. Some
|
79
|
+
expectations you might write for this robot might be the following:
|
80
|
+
|
81
|
+
rob = Robot.new
|
82
|
+
|
83
|
+
rob.should_not_be_nil
|
84
|
+
rob.should_be_kind_of Robot
|
85
|
+
rob.x_coordinate.should_equal 0
|
86
|
+
rob.y_coordinate.should_equal 0
|
87
|
+
rob.location.should_equal [0,0]
|
88
|
+
|
89
|
+
rob.move_north(1).should_equal [0, 1]
|
90
|
+
rob.move_south(5).should_equal [0, -4]
|
91
|
+
rob.move_east(10).should_equal [10, -4]
|
92
|
+
rob.move_west(5).should_equal [5, -4]
|
93
|
+
|
94
|
+
The code example above isn't intended to demonstrate good design, but has been
|
95
|
+
created explicitly to demonstrate the use of the expectation methods.
|
96
|
+
|
97
|
+
Also note that these expectations would be written iteratively, but the purpose
|
98
|
+
of this document is to serve as an introduction to the RSpec framework, not to
|
99
|
+
Behaviour Driven Development itself.
|
100
|
+
|
101
|
+
As you can see, writing expectations can be rather verbose, even for a simple
|
102
|
+
project like the example above. For clarity, your expectations will be grouped
|
103
|
+
into specifications, which are described in the next section.
|
104
|
+
|
105
|
+
== Specifications
|
106
|
+
|
107
|
+
Your software will be specified by writing expectations, which were explained in
|
108
|
+
the previous section. Your expectations will be grouped into specifications for
|
109
|
+
clarity. A specification is simply a method that contains expectations. The name
|
110
|
+
of your specification will be used by the Spec Runner (see Running and
|
111
|
+
Reporting) to inform you of unmet expectations, so choose your names wisely.
|
112
|
+
|
113
|
+
Consider the robot example from the previous example, but divided into
|
114
|
+
specification methods:
|
115
|
+
|
116
|
+
def initialization_without_coordinates
|
117
|
+
rob = Robot.new
|
118
|
+
rob.x_coordinate.should_equal 0
|
119
|
+
rob.y_coordinate.should_equal 0
|
120
|
+
rob.location.should_equal [0,0]
|
121
|
+
end
|
122
|
+
|
123
|
+
def initialization_with_coordinates
|
124
|
+
rob = Robot.new(10, 15)
|
125
|
+
rob.x_coordinate.should_equal 10
|
126
|
+
rob.y_coordinate.should_equal 15
|
127
|
+
rob.location.should_equal [10, 15]
|
128
|
+
end
|
129
|
+
|
130
|
+
def north_movement
|
131
|
+
rob = Robot.new
|
132
|
+
rob.move_north(1).should_equal [0, 1]
|
133
|
+
end
|
134
|
+
|
135
|
+
def west_movement
|
136
|
+
rob = Robot.new(10, 5)
|
137
|
+
rob.move_west(15).should_equal [-5, 5]
|
138
|
+
end
|
139
|
+
|
140
|
+
By dividing expectations into specification methods, our specifications for the
|
141
|
+
behaviour of our software are far easier to read and clearly express the intent.
|
142
|
+
Even those who are unfamiliar with Ruby specifically (and perhaps even some who
|
143
|
+
are relatively unfamiliar with software development in general) can easily read
|
144
|
+
our specifications.
|
145
|
+
|
146
|
+
== Fixtures
|
147
|
+
|
148
|
+
As you can see, there is some duplicated code in the example from the last
|
149
|
+
section in the creation of the Robot objects. You will find that the
|
150
|
+
initialization of objects will often be duplicated when writing specifications.
|
151
|
+
RSpec provides you with a way of setting up this data ahead of time, by
|
152
|
+
providing two methods: setup and teardown.
|
153
|
+
|
154
|
+
The setup method is called before invoking each specification to allow you to
|
155
|
+
set up resources which are required for each specification, and the teardown
|
156
|
+
method is called after invoking each specification, to allow you to
|
157
|
+
appropriately deallocate or close resources wich were required for the
|
158
|
+
specifications.
|
159
|
+
|
160
|
+
The example in the next section include a demonstration of the usage of fixtures
|
161
|
+
in Contexts.
|
162
|
+
|
163
|
+
== Contexts
|
164
|
+
|
165
|
+
The specifications described in the Specifications example are absolutely
|
166
|
+
useless if they're not placed in a context. Because you will be writing a large
|
167
|
+
number of specifications for your software, you will want a way to divide them
|
168
|
+
into logical groups. Specification methods are grouped within subclasses of
|
169
|
+
Context. You can define as many contexts as you wish, and you are encouraged to
|
170
|
+
divide your software into many well-defined contexts.
|
171
|
+
|
172
|
+
The following Context is a complete specification for the movement of the robot,
|
173
|
+
and if it were run, would produce useful output.
|
174
|
+
|
175
|
+
require 'spec'
|
176
|
+
class RobotMovement < Spec::Context
|
177
|
+
def setup
|
178
|
+
@rob = Robot.new
|
179
|
+
@rob1 = Robot.new(10, 15)
|
180
|
+
end
|
181
|
+
|
182
|
+
def movement
|
183
|
+
@rob.move_north(1).should_equal [0, 1]
|
184
|
+
@rob1.move_west(15).should_equal [-5, 5]
|
185
|
+
end
|
186
|
+
|
187
|
+
def teardown
|
188
|
+
@rob.die
|
189
|
+
@rob1.die
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
=== Specification Naming
|
194
|
+
|
195
|
+
RSpec does not require the use of a specific naming scheme for specifications.
|
196
|
+
When a context is run, all of the public methods which you define in the context
|
197
|
+
will be executed. The only exceptions are currently methods which are used
|
198
|
+
internally by RSpec. The forbidden names are initialize, mock, violated, and
|
199
|
+
run. Because of Ruby's dynamic nature, you will not see a warning if you
|
200
|
+
override any of these methods, and unexpected behaviour may ensue.
|
201
|
+
|
202
|
+
In addition to the four aforementioned forbidden specification method names,
|
203
|
+
methods named with a leading underscore will also not be run as specifications.
|
204
|
+
This allows you a way to define methods for your own use within the Context and
|
205
|
+
not have them run as specifications.
|
206
|
+
|
207
|
+
== Running and Reporting
|
208
|
+
|
209
|
+
There currently exists a command-line runner for RSpec, called 'spec'. If you
|
210
|
+
write specifications and pass them to the runner on the command line, your
|
211
|
+
specifications will run and tell you where you have errors. You are encouraged
|
212
|
+
to try out the command line runner, first with the provided examples, and then
|
213
|
+
by writing your own specifications.
|
214
|
+
|
215
|
+
As an example of the output, if you run the movie_spec.rb file from the RSpec
|
216
|
+
examples, you will get the following output:
|
217
|
+
|
218
|
+
$ spec movie_spec.rb
|
219
|
+
....
|
220
|
+
Finished in 0.016 seconds.
|
221
|
+
|
222
|
+
4 specifications, 4 expectations, 0 failures.
|
223
|
+
|
224
|
+
The spec runner counts the specification as it executes them by printing a
|
225
|
+
single dot (.) to the screen. It indicates a failure with an X. For every
|
226
|
+
failure, the specification runner will provide a backtrace indicating where the
|
227
|
+
failure occured. A failure is basically a raised exception. Either an exception
|
228
|
+
raised by the software you're specifying, by Ruby itself (such as SyntaxError or
|
229
|
+
RuntimeError), or it will be an unmet expectation (ExpectationNotMet).
|
230
|
+
|
231
|
+
For instance, if you expect "Space Balls" to be in OneMovieList which actually
|
232
|
+
includes "Star Wars", you will get the following error:
|
233
|
+
|
234
|
+
$ spec movie_spec.rb
|
235
|
+
X...
|
236
|
+
|
237
|
+
1)
|
238
|
+
<#<MovieList:0x284c1e0 @movies={"Star Wars"=>#<Movie:0x284c180 @name="Star Wars"
|
239
|
+
>}>> should include <"Space Balls"> (Spec::Exceptions::ExpectationNotMetError)
|
240
|
+
./movie_spec.rb:34:in `should_include_space_balls'
|
241
|
+
../bin/spec:10
|
242
|
+
|
243
|
+
Finished in 0.016 seconds
|
244
|
+
|
245
|
+
4 specifications, 4 expectations, 1 failures
|
246
|
+
|
247
|
+
This informs you that the MovieList object should include "Space Balls", but got
|
248
|
+
an ExpectationNotMet error. The backtrace also informs you that the unmet
|
249
|
+
expectation can be found in the file 'movie_spec.rb' on line 34, in the
|
250
|
+
`should_include_space_balls' method.
|
251
|
+
|
252
|
+
== Conclusion
|
253
|
+
|
254
|
+
This document was by no means intended to provide an exhaustive overview of
|
255
|
+
Behaviour Driven Development in general, or RSpec specifically. It is intended
|
256
|
+
as a tutorial to get you started with specifying the behaviour of your software
|
257
|
+
with RSpec. More information can be found in the API documentation of RSpec
|
258
|
+
itself. Further documentation on BDD, and RSpec is on the way.
|
259
|
+
|
data/examples/craps_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'spec'
|
2
|
-
require 'craps'
|
2
|
+
require File.dirname(__FILE__) + '/craps'
|
3
3
|
|
4
4
|
class CrapsSpecification < Spec::Context
|
5
5
|
|
@@ -94,7 +94,7 @@ class CrapsSpecification < Spec::Context
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def _load_die(die, rolls)
|
97
|
-
rolls.each {
|
97
|
+
rolls.each { |roll| die.should_receive(:roll).once.with_no_args.and_return(roll) }
|
98
98
|
end
|
99
99
|
|
100
100
|
end
|
data/lib/spec/text_runner.rb
CHANGED
@@ -56,7 +56,7 @@ module Spec
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def dump_backtrace(trace)
|
59
|
-
lines = trace.reject {|line| line.include? "lib/spec"}
|
59
|
+
lines = trace.reject {|line| line.include? "lib/spec"}.reject {|line | line.include? "./spec:"}
|
60
60
|
@output << lines.join("\n")
|
61
61
|
@output << "\n\n"
|
62
62
|
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.
|
2
|
+
rubygems_version: 0.8.10
|
3
3
|
specification_version: 1
|
4
4
|
name: rspec
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2005-
|
6
|
+
version: 0.2.0
|
7
|
+
date: 2005-09-27
|
8
8
|
summary: Behaviour Specification Framework for Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -27,8 +27,6 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
27
27
|
version: 0.0.0
|
28
28
|
version:
|
29
29
|
platform: ruby
|
30
|
-
signing_key:
|
31
|
-
cert_chain:
|
32
30
|
authors:
|
33
31
|
- Steven Baker
|
34
32
|
files:
|
@@ -37,6 +35,7 @@ files:
|
|
37
35
|
- Rakefile.rb
|
38
36
|
- README
|
39
37
|
- TODO
|
38
|
+
- TUTORIAL
|
40
39
|
- lib/spec.rb
|
41
40
|
- lib/spec/collector.rb
|
42
41
|
- lib/spec/context.rb
|
@@ -46,18 +45,12 @@ files:
|
|
46
45
|
- lib/spec/text_runner.rb
|
47
46
|
- test/context_fixtures_test.rb
|
48
47
|
- test/context_run_test.rb
|
49
|
-
- test/craps_collector_test.rb
|
50
48
|
- test/error_reporting_test.rb
|
51
49
|
- test/expectations_test.rb
|
52
50
|
- test/get_classes.rb
|
53
51
|
- test/mock_test.rb
|
54
|
-
- test/movie_collector_test.rb
|
55
|
-
- test/rspec_craps_and_movie_test.rb
|
56
|
-
- test/rspec_craps_test.rb
|
57
|
-
- test/rspec_movie_test.rb
|
58
52
|
- test/spec_collection_test.rb
|
59
53
|
- test/specification_identification_test.rb
|
60
|
-
- test/test_unit_ext_spec.rb
|
61
54
|
- test/text_runner_test.rb
|
62
55
|
- examples/craps.rb
|
63
56
|
- examples/craps_spec.rb
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'spec'
|
4
|
-
|
5
|
-
|
6
|
-
class CrapsCollectorTest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
def setup
|
9
|
-
require 'examples/craps_spec'
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_should_collect_only_craps_specification
|
13
|
-
assert_equal CrapsSpecification.specifications.length, Spec::Collector.collection.length
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'spec'
|
4
|
-
|
5
|
-
|
6
|
-
class MovieCollectorTest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
def setup
|
9
|
-
require 'examples/movie_spec'
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_should_collect_only_movie_specs
|
13
|
-
specifications = EmptyMovieList.specifications.length
|
14
|
-
specifications += OneMovieList.specifications.length
|
15
|
-
assert_equal specifications, Spec::Collector.collection.length
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'rspec'
|
4
|
-
require 'get_classes'
|
5
|
-
|
6
|
-
class RSpecCrapsAndMovieTest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
def setup
|
9
|
-
@rspec = RSpec.new(["examples/craps_spec.rb", "examples/movie_spec.rb"])
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_should_load_craps_and_movie_specs
|
13
|
-
assert_equal true, get_classes.include?('CrapsSpecification')
|
14
|
-
assert_equal true, get_classes.include?('EmptyMovieList')
|
15
|
-
assert_equal true, get_classes.include?('OneMovieList')
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_should_include_all_specifications
|
19
|
-
specifications = CrapsSpecification.collection.length
|
20
|
-
specifications += EmptyMovieList.collection.length
|
21
|
-
specifications += OneMovieList.collection.length
|
22
|
-
assert_equal specifications, Spec::Collector.collection.length
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_should_run_all_specifications
|
26
|
-
buffer = ""
|
27
|
-
@rspec.run(Spec::TextRunner.new(buffer))
|
28
|
-
assert_equal true, buffer.include?("16 specifications, 16 expectations, 0 failures")
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
data/test/rspec_craps_test.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'spec'
|
4
|
-
|
5
|
-
require 'rspec'
|
6
|
-
|
7
|
-
require 'get_classes'
|
8
|
-
|
9
|
-
class RSpecCrapsTest < Test::Unit::TestCase
|
10
|
-
|
11
|
-
def setup
|
12
|
-
@rspec = RSpec.new(["examples/craps_spec.rb"])
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_should_load_craps_spec
|
16
|
-
assert_equal true, get_classes.include?('CrapsSpecification')
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_should_not_load_movie_specs
|
20
|
-
assert_equal false, get_classes.include?('OneMovieList')
|
21
|
-
assert_equal false, get_classes.include?('EmptyMovieList')
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_should_include_craps_specifications
|
25
|
-
assert_equal CrapsSpecification.collection.length, Spec::Collector.collection.length
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_should_run_craps_specifications
|
29
|
-
buffer = ""
|
30
|
-
@rspec.run(Spec::TextRunner.new(buffer))
|
31
|
-
assert_equal true, buffer.include?("12 specifications, 12 expectations, 0 failures")
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
data/test/rspec_movie_test.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'rspec'
|
4
|
-
require 'get_classes'
|
5
|
-
|
6
|
-
class RSpecMovieTest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
def setup
|
9
|
-
@rspec = RSpec.new(["examples/movie_spec.rb"])
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_should_load_movie_spec
|
13
|
-
assert_equal true, get_classes.include?('EmptyMovieList')
|
14
|
-
assert_equal true, get_classes.include?('OneMovieList')
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_should_not_load_craps_spec
|
18
|
-
assert_equal false, get_classes.include?('CrapsSpecification')
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_should_include_movie_specifications
|
22
|
-
specifications = EmptyMovieList.collection.length + OneMovieList.collection.length
|
23
|
-
assert_equal specifications, Spec::Collector.collection.length
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_should_run_movie_specifications
|
27
|
-
buffer = ""
|
28
|
-
@rspec.run(Spec::TextRunner.new(buffer))
|
29
|
-
assert_equal true, buffer.include?("4 specifications, 4 expectations, 0 failures")
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|