database_cleaner 0.8.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +150 -82
- data/History.txt +19 -1
- data/README.textile +61 -59
- data/Rakefile +7 -17
- data/VERSION.yml +3 -3
- data/examples/Gemfile +14 -20
- data/examples/Gemfile.lock +150 -82
- data/examples/features/step_definitions/translation_steps.rb +14 -14
- data/examples/features/support/env.rb +6 -2
- data/features/cleaning.feature +1 -1
- data/features/cleaning_default_strategy.feature +1 -1
- data/features/cleaning_multiple_dbs.feature +1 -2
- data/features/cleaning_multiple_orms.feature +7 -7
- data/features/support/env.rb +1 -1
- data/lib/database_cleaner/active_record/base.rb +26 -6
- data/lib/database_cleaner/active_record/deletion.rb +2 -2
- data/lib/database_cleaner/active_record/transaction.rb +9 -9
- data/lib/database_cleaner/active_record/truncation.rb +157 -50
- data/lib/database_cleaner/base.rb +2 -2
- data/lib/database_cleaner/configuration.rb +26 -3
- data/lib/database_cleaner/data_mapper/truncation.rb +2 -2
- data/lib/database_cleaner/generic/truncation.rb +7 -5
- data/lib/database_cleaner/mongo/base.rb +16 -0
- data/lib/database_cleaner/mongo/truncation.rb +9 -14
- data/lib/database_cleaner/mongo/truncation_mixin.rb +22 -0
- data/lib/database_cleaner/mongo_mapper/truncation.rb +2 -2
- data/lib/database_cleaner/mongoid/truncation.rb +2 -2
- data/lib/database_cleaner/moped/truncation.rb +6 -2
- data/lib/database_cleaner/sequel/truncation.rb +6 -6
- data/spec/database_cleaner/active_record/base_spec.rb +27 -15
- data/spec/database_cleaner/active_record/truncation/mysql2_spec.rb +40 -0
- data/spec/database_cleaner/active_record/truncation/mysql_spec.rb +40 -0
- data/spec/database_cleaner/active_record/truncation/postgresql_spec.rb +48 -0
- data/spec/database_cleaner/active_record/truncation/shared_fast_truncation.rb +40 -0
- data/spec/database_cleaner/active_record/truncation_spec.rb +102 -33
- data/spec/database_cleaner/base_spec.rb +14 -14
- data/spec/database_cleaner/configuration_spec.rb +15 -10
- data/spec/database_cleaner/data_mapper/base_spec.rb +1 -1
- data/spec/database_cleaner/data_mapper/transaction_spec.rb +1 -1
- data/spec/database_cleaner/data_mapper/truncation_spec.rb +1 -1
- data/spec/database_cleaner/generic/base_spec.rb +1 -1
- data/spec/database_cleaner/generic/truncation_spec.rb +35 -5
- data/spec/database_cleaner/mongo/mongo_examples.rb +26 -0
- data/spec/database_cleaner/mongo/truncation_spec.rb +72 -0
- data/spec/database_cleaner/mongo_mapper/base_spec.rb +1 -1
- data/spec/database_cleaner/sequel/base_spec.rb +1 -1
- data/spec/database_cleaner/sequel/transaction_spec.rb +1 -1
- data/spec/database_cleaner/sequel/truncation_spec.rb +1 -1
- data/spec/database_cleaner/{shared_strategy_spec.rb → shared_strategy.rb} +0 -0
- data/spec/spec_helper.rb +6 -4
- data/spec/support/active_record/database_setup.rb +4 -0
- data/spec/support/active_record/mysql2_setup.rb +38 -0
- data/spec/support/active_record/mysql_setup.rb +38 -0
- data/spec/support/active_record/postgresql_setup.rb +41 -0
- data/spec/support/active_record/schema_setup.rb +10 -0
- metadata +313 -46
- data/spec/spec.opts +0 -7
data/Gemfile.lock
CHANGED
@@ -1,28 +1,49 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
ZenTest (4.
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
ZenTest (4.8.1)
|
5
|
+
actionpack (3.2.6)
|
6
|
+
activemodel (= 3.2.6)
|
7
|
+
activesupport (= 3.2.6)
|
8
|
+
builder (~> 3.0.0)
|
9
|
+
erubis (~> 2.7.0)
|
10
|
+
journey (~> 1.0.1)
|
11
|
+
rack (~> 1.4.0)
|
12
|
+
rack-cache (~> 1.2)
|
13
|
+
rack-test (~> 0.6.1)
|
14
|
+
sprockets (~> 2.1.3)
|
15
|
+
activemodel (3.2.6)
|
16
|
+
activesupport (= 3.2.6)
|
17
|
+
builder (~> 3.0.0)
|
18
|
+
activerecord (3.2.6)
|
19
|
+
activemodel (= 3.2.6)
|
20
|
+
activesupport (= 3.2.6)
|
21
|
+
arel (~> 3.0.2)
|
22
|
+
tzinfo (~> 0.3.29)
|
23
|
+
activesupport (3.2.6)
|
24
|
+
i18n (~> 0.6)
|
25
|
+
multi_json (~> 1.0)
|
26
|
+
addressable (2.2.8)
|
27
|
+
arel (3.0.2)
|
28
|
+
bson (1.6.4)
|
29
|
+
bson_ext (1.6.4)
|
30
|
+
bson (~> 1.6.4)
|
31
|
+
builder (3.0.0)
|
32
|
+
columnize (0.3.6)
|
33
|
+
couch_potato (0.5.7)
|
34
|
+
activemodel
|
35
|
+
couchrest (>= 1.0.1)
|
14
36
|
json
|
15
37
|
couchrest (1.0.1)
|
16
38
|
json (>= 1.4.6)
|
17
39
|
mime-types (>= 1.15)
|
18
40
|
rest-client (>= 1.5.1)
|
19
|
-
cucumber (
|
20
|
-
builder (
|
21
|
-
diff-lcs (
|
22
|
-
gherkin (~> 2.
|
23
|
-
|
24
|
-
|
25
|
-
data_objects (0.10.2)
|
41
|
+
cucumber (1.2.1)
|
42
|
+
builder (>= 2.1.2)
|
43
|
+
diff-lcs (>= 1.1.3)
|
44
|
+
gherkin (~> 2.11.0)
|
45
|
+
json (>= 1.4.6)
|
46
|
+
data_objects (0.10.8)
|
26
47
|
addressable (~> 2.1)
|
27
48
|
datamapper (1.0.0)
|
28
49
|
dm-aggregates (= 1.0.0)
|
@@ -35,7 +56,7 @@ GEM
|
|
35
56
|
dm-transactions (= 1.0.0)
|
36
57
|
dm-types (= 1.0.0)
|
37
58
|
dm-validations (= 1.0.0)
|
38
|
-
diff-lcs (1.1.
|
59
|
+
diff-lcs (1.1.3)
|
39
60
|
dm-aggregates (1.0.0)
|
40
61
|
dm-core (~> 1.0.0)
|
41
62
|
dm-constraints (1.0.0)
|
@@ -68,96 +89,143 @@ GEM
|
|
68
89
|
uuidtools (~> 2.1.1)
|
69
90
|
dm-validations (1.0.0)
|
70
91
|
dm-core (~> 1.0.0)
|
71
|
-
do_sqlite3 (0.10.
|
72
|
-
data_objects (= 0.10.
|
73
|
-
|
92
|
+
do_sqlite3 (0.10.8)
|
93
|
+
data_objects (= 0.10.8)
|
94
|
+
erubis (2.7.0)
|
74
95
|
extlib (0.9.15)
|
75
|
-
fastercsv (1.5.
|
76
|
-
ffi (
|
77
|
-
|
78
|
-
|
79
|
-
gherkin (2.1.5)
|
80
|
-
trollop (~> 1.16.2)
|
96
|
+
fastercsv (1.5.5)
|
97
|
+
ffi (1.1.4)
|
98
|
+
gherkin (2.11.1)
|
99
|
+
json (>= 1.4.6)
|
81
100
|
git (1.2.5)
|
82
|
-
|
83
|
-
|
84
|
-
|
101
|
+
guard (1.3.0)
|
102
|
+
listen (>= 0.4.2)
|
103
|
+
thor (>= 0.14.6)
|
104
|
+
guard-rspec (1.2.1)
|
105
|
+
guard (>= 1.1)
|
106
|
+
hike (1.2.1)
|
107
|
+
i18n (0.6.0)
|
108
|
+
jeweler (1.8.4)
|
109
|
+
bundler (~> 1.0)
|
85
110
|
git (>= 1.2.5)
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
json (1.
|
111
|
+
rake
|
112
|
+
rdoc
|
113
|
+
journey (1.0.4)
|
114
|
+
json (1.7.3)
|
90
115
|
json_pure (1.4.6)
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
116
|
+
linecache (0.46)
|
117
|
+
rbx-require-relative (> 0.0.4)
|
118
|
+
listen (0.4.7)
|
119
|
+
rb-fchange (~> 0.0.5)
|
120
|
+
rb-fsevent (~> 0.9.1)
|
121
|
+
rb-inotify (~> 0.8.8)
|
122
|
+
mime-types (1.19)
|
123
|
+
mongo (1.6.4)
|
124
|
+
bson (~> 1.6.4)
|
125
|
+
mongo_ext (0.19.3)
|
126
|
+
mongo_mapper (0.11.1)
|
127
|
+
activemodel (~> 3.0)
|
128
|
+
activesupport (~> 3.0)
|
129
|
+
plucky (~> 0.4.0)
|
130
|
+
mongoid (3.0.1)
|
131
|
+
activemodel (~> 3.1)
|
132
|
+
moped (~> 1.1.1)
|
133
|
+
origin (~> 1.0.3)
|
134
|
+
tzinfo (~> 0.3.22)
|
135
|
+
moped (1.1.2)
|
136
|
+
multi_json (1.3.6)
|
137
|
+
mysql (2.8.1)
|
138
|
+
mysql2 (0.3.11)
|
139
|
+
origin (1.0.4)
|
140
|
+
pg (0.14.0)
|
141
|
+
plucky (0.4.4)
|
142
|
+
mongo (~> 1.5)
|
143
|
+
rack (1.4.1)
|
144
|
+
rack-cache (1.2)
|
145
|
+
rack (>= 0.4)
|
146
|
+
rack-ssl (1.3.2)
|
147
|
+
rack
|
148
|
+
rack-test (0.6.1)
|
149
|
+
rack (>= 1.0)
|
150
|
+
railties (3.2.6)
|
151
|
+
actionpack (= 3.2.6)
|
152
|
+
activesupport (= 3.2.6)
|
153
|
+
rack-ssl (~> 1.3.2)
|
154
|
+
rake (>= 0.8.7)
|
155
|
+
rdoc (~> 3.4)
|
156
|
+
thor (>= 0.14.6, < 2.0)
|
157
|
+
rake (0.9.2.2)
|
158
|
+
rb-fchange (0.0.5)
|
159
|
+
ffi
|
160
|
+
rb-fsevent (0.9.1)
|
161
|
+
rb-inotify (0.8.8)
|
111
162
|
ffi (>= 0.5.0)
|
112
|
-
|
113
|
-
|
163
|
+
rbx-require-relative (0.0.9)
|
164
|
+
rcov (1.0.0)
|
165
|
+
rdoc (3.12)
|
166
|
+
json (~> 1.4)
|
167
|
+
rest-client (1.6.7)
|
114
168
|
mime-types (>= 1.16)
|
115
|
-
rspactor (0.
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
169
|
+
rspactor (0.6.4)
|
170
|
+
rspec (2.11.0)
|
171
|
+
rspec-core (~> 2.11.0)
|
172
|
+
rspec-expectations (~> 2.11.0)
|
173
|
+
rspec-mocks (~> 2.11.0)
|
174
|
+
rspec-core (2.11.1)
|
175
|
+
rspec-expectations (2.11.1)
|
176
|
+
diff-lcs (~> 1.1.3)
|
177
|
+
rspec-mocks (2.11.1)
|
178
|
+
rspec-rails (2.11.0)
|
179
|
+
actionpack (>= 3.0)
|
180
|
+
activesupport (>= 3.0)
|
181
|
+
railties (>= 3.0)
|
182
|
+
rspec (~> 2.11.0)
|
183
|
+
ruby-debug (0.10.4)
|
124
184
|
columnize (>= 0.1)
|
125
|
-
ruby-debug-base (~> 0.10.
|
126
|
-
ruby-debug-base (0.10.
|
185
|
+
ruby-debug-base (~> 0.10.4.0)
|
186
|
+
ruby-debug-base (0.10.4)
|
127
187
|
linecache (>= 0.3)
|
128
|
-
rubyforge (2.0.4)
|
129
|
-
json_pure (>= 1.1.7)
|
130
188
|
sequel (3.21.0)
|
131
|
-
|
189
|
+
sprockets (2.1.3)
|
190
|
+
hike (~> 1.2)
|
191
|
+
rack (~> 1.0)
|
192
|
+
tilt (~> 1.1, != 1.3.0)
|
193
|
+
sqlite3 (1.3.6)
|
194
|
+
sqlite3-ruby (1.3.3)
|
195
|
+
sqlite3 (>= 1.3.3)
|
132
196
|
stringex (1.1.0)
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
uuidtools (2.1.1)
|
138
|
-
will_paginate (2.3.14)
|
197
|
+
thor (0.15.4)
|
198
|
+
tilt (1.3.3)
|
199
|
+
tzinfo (0.3.33)
|
200
|
+
uuidtools (2.1.3)
|
139
201
|
|
140
202
|
PLATFORMS
|
141
203
|
ruby
|
142
204
|
|
143
205
|
DEPENDENCIES
|
144
206
|
ZenTest
|
145
|
-
activerecord
|
207
|
+
activerecord
|
208
|
+
bson_ext
|
146
209
|
bundler
|
147
|
-
couch_potato
|
210
|
+
couch_potato
|
148
211
|
cucumber
|
149
212
|
datamapper (= 1.0.0)
|
150
213
|
dm-migrations (= 1.0.0)
|
151
214
|
dm-sqlite-adapter (= 1.0.0)
|
215
|
+
guard-rspec
|
152
216
|
jeweler
|
153
217
|
json_pure
|
154
|
-
|
155
|
-
|
218
|
+
mongo_ext
|
219
|
+
mongo_mapper
|
220
|
+
mongoid
|
221
|
+
mysql
|
222
|
+
mysql2
|
223
|
+
pg
|
156
224
|
rake
|
157
225
|
rcov
|
158
226
|
rspactor
|
159
|
-
rspec
|
227
|
+
rspec-rails
|
160
228
|
ruby-debug
|
161
229
|
sequel (~> 3.21.0)
|
162
230
|
sqlite3-ruby
|
163
|
-
tzinfo
|
231
|
+
tzinfo
|
data/History.txt
CHANGED
@@ -1,7 +1,25 @@
|
|
1
|
-
== 0.
|
1
|
+
== 0.9.0 2012-10-11
|
2
|
+
|
3
|
+
=== New Features
|
4
|
+
|
5
|
+
* New options for AR :truncation for speed. See README for details. (Stanislaw Pankevich)
|
6
|
+
* view caching works with the schema_plus gem loaded
|
7
|
+
* ActiveRecord::ConnectionAdapters::AbstractAdapter#views was renamed to an internal name
|
8
|
+
* ActiveRecord truncation strategy caches the list of tables #130 (Petteri Räty)
|
9
|
+
* Caches AR DB connections which speeds up cleaning with multiple DBs and allows for transation strategy.
|
10
|
+
* MongoDB :truncation strategy (wihtout use of additional library like Mogoid). #138 (Christopher Darrell & Richard Luther/@sidereel)
|
11
|
+
* Add Sequel support for multiple migration storage names in #148 (Jack Chu)
|
12
|
+
* Multiple database support for Mongoid 3 #149 (Luke Francl)
|
13
|
+
|
14
|
+
=== Bug Fixes
|
15
|
+
* :deletion for AR Postgres in JRuby now works #140 (Heiko Seebach)
|
16
|
+
* Rescue LoadError when AR adapters not available. #145 (Garrow Bedrossian)
|
17
|
+
* Fixes DatabaseCleaner::[] to cache cleaners.
|
2
18
|
|
3
19
|
== 0.8.0 2012-06-02
|
4
20
|
|
21
|
+
* Faster truncation strategy for ActiveRecord with MySQL or PostgreSQL
|
22
|
+
* Upgrade to RSpec 2
|
5
23
|
* Support for Mongoid 3/Moped (Andrew Bennett)
|
6
24
|
* Postgres Adapter no longer generates invalid SQL when no tables provided. (Michael-Keith Bernard)
|
7
25
|
|
data/README.textile
CHANGED
@@ -7,6 +7,8 @@ that is testing with a database.
|
|
7
7
|
|
8
8
|
ActiveRecord, DataMapper, Sequel, MongoMapper, Mongoid, and CouchPotato are supported.
|
9
9
|
|
10
|
+
!https://secure.travis-ci.org/bmabey/database_cleaner.png(Build Status)!:http://travis-ci.org/bmabey/database_cleaner
|
11
|
+
|
10
12
|
Here is an overview of the strategies supported for each library:
|
11
13
|
|
12
14
|
|_. ORM |_. Truncation |_. Transaction |_. Deletion |
|
@@ -17,18 +19,36 @@ Here is an overview of the strategies supported for each library:
|
|
17
19
|
| Mongoid | **Yes** | No | No |
|
18
20
|
| Sequel | **Yes** | Yes | No |
|
19
21
|
|
20
|
-
|
22
|
+
|_. Driver |_. Truncation |_. Transaction |_. Deletion |
|
23
|
+
| Mongo | Yes | No | No |
|
21
24
|
|
22
|
-
|
23
|
-
locks (as reported by some Oracle DB users). The @:deletion@ option has been reported to
|
24
|
-
be faster than @:truncation@ in some cases as well. In general, the best approach is to use
|
25
|
-
@:transaction@ since it is the fastest.
|
25
|
+
(Default strategy for each library is denoted in bold)
|
26
26
|
|
27
27
|
Database Cleaner also includes a @null@ strategy (that does no cleaning at all) which can be used
|
28
28
|
with any ORM library. You can also explicitly use it by setting your strategy to @nil@.
|
29
29
|
|
30
30
|
For support or to discuss development please use the "Google Group":http://groups.google.com/group/database_cleaner.
|
31
31
|
|
32
|
+
h2(fastest). What strategy is fastest?
|
33
|
+
|
34
|
+
For the SQL libraries the fastest option will be to use @:transaction@ as transactions are
|
35
|
+
simply rolled back. If you can use this strategy you should. However, if you wind up needing
|
36
|
+
to use multiple database connections in your tests (i.e. your tests run in a different proceess
|
37
|
+
than your application) then using this strategy becomes a bit more difficult. You can get around the
|
38
|
+
problem a number of ways. One common approach is to force all processes to use the same database
|
39
|
+
connection ("common ActiveRecord hack":http://blog.plataformatec.com.br/2011/12/three-tips-to-improve-the-performance-of-your-test-suite/) however this approach has been reported to result in
|
40
|
+
non-deterministic failures. Another approach is to have the transactions rolled back in the
|
41
|
+
application's process and relax the isolation level of the database (so the tests can read the
|
42
|
+
uncommited transactions). An easier, but slower, solution is to use the @:truncation@ or
|
43
|
+
@:deletion@ strategy.
|
44
|
+
|
45
|
+
So what is fastest out of @:deletion@ and @:truncation@? Well, it depends on your table structure
|
46
|
+
and what percentage of tables you populate in an average test. The reasoning is out the the
|
47
|
+
scope of this README but here is a "good SO answer on this topic for Postgres":http://stackoverflow.com/questions/11419536/postgresql-truncation-speed/11423886#11423886. Some people report
|
48
|
+
much faster speeds with @:deletion@ while others say @:truncation@ is faster for them. The best approach therefore
|
49
|
+
is it try all options on your test suite and see what is faster. If you are using ActiveRecord then take a look
|
50
|
+
at the "additional options":#ar_truncation available for @:truncation@.
|
51
|
+
|
32
52
|
h2. Dependencies
|
33
53
|
|
34
54
|
Because database_cleaner supports multiple ORMs, it doesn't make sense to include all the dependencies
|
@@ -80,21 +100,18 @@ strategy the remaining time. To accomplish this you can say:
|
|
80
100
|
# then make the DatabaseCleaner.start and DatabaseCleaner.clean calls appropriately
|
81
101
|
</pre>
|
82
102
|
|
83
|
-
h3.
|
103
|
+
h3(#ar_truncation). Additional ActiveRecord options for Truncation
|
84
104
|
|
85
|
-
|
86
|
-
|
105
|
+
The following options are available for ActiveRecord's @:truncation@ strategy _only_ for
|
106
|
+
MySQL and Postgres.
|
87
107
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
108
|
+
* @:pre_count@ - When set to @true@ this will check each table for existing rows before
|
109
|
+
truncating it. This can speed up test suites when many of the tables to be truncated
|
110
|
+
are never populated. Defaults to @:false@. (Also, see the section on "What strategy is fastest?":#fastest)
|
111
|
+
* @:reset_ids@ - This only matters when @:pre_count@ is used, and it will make sure that a
|
112
|
+
tables auto-incrementing id is reset even if there are no rows in the table (e.g. records
|
113
|
+
were created in the test but also removed before DatabaseCleaner gets to it). Defaults to @true@.
|
92
114
|
|
93
|
-
after :each do
|
94
|
-
DatabaseCleaner.clean
|
95
|
-
end
|
96
|
-
end
|
97
|
-
</pre>
|
98
115
|
|
99
116
|
h3. RSpec Example
|
100
117
|
|
@@ -117,9 +134,27 @@ RSpec.configure do |config|
|
|
117
134
|
end
|
118
135
|
</pre>
|
119
136
|
|
137
|
+
h3. Minitest Example
|
138
|
+
|
139
|
+
<pre>
|
140
|
+
DatabaseCleaner.strategy = :transaction
|
141
|
+
|
142
|
+
class MiniTest::Spec
|
143
|
+
before :each do
|
144
|
+
DatabaseCleaner.start
|
145
|
+
end
|
146
|
+
|
147
|
+
after :each do
|
148
|
+
DatabaseCleaner.clean
|
149
|
+
end
|
150
|
+
end
|
151
|
+
</pre>
|
152
|
+
|
120
153
|
h3. Cucumber Example
|
121
154
|
|
122
|
-
|
155
|
+
If you're using Cucumber with Rails, just use the generator that ships with cucumber-rails, and that will create all the code you need to integrate DatabaseCleaner into your Rails project.
|
156
|
+
|
157
|
+
Otherwise, to add DatabaseCleaner to your project by hand, create a file features/support/database_cleaner.rb that looks like this:
|
123
158
|
|
124
159
|
<pre>
|
125
160
|
begin
|
@@ -129,13 +164,7 @@ begin
|
|
129
164
|
rescue NameError
|
130
165
|
raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
|
131
166
|
end
|
132
|
-
</pre>
|
133
|
-
|
134
|
-
A good idea is to create the before and after hooks to use the DatabaseCleaner.start and DatabaseCleaner.clean methods.
|
135
|
-
|
136
|
-
Inside features/support/hooks.rb:
|
137
167
|
|
138
|
-
<pre>
|
139
168
|
Before do
|
140
169
|
DatabaseCleaner.start
|
141
170
|
end
|
@@ -159,6 +188,9 @@ Sometimes you need to use multiple ORMs in your application. You can use Databas
|
|
159
188
|
|
160
189
|
#How to specify particular connections
|
161
190
|
DatabaseCleaner[:active_record,{:connection => :two}]
|
191
|
+
|
192
|
+
# You may also pass in the model directly:
|
193
|
+
DatabaseCleaner[:active_record,{:model => ModelWithDifferentConnection}]
|
162
194
|
</pre>
|
163
195
|
|
164
196
|
Usage beyond that remains the same with DatabaseCleaner.start calling any setup on the different configured connections, and DatabaseCleaner.clean executing afterwards.
|
@@ -167,48 +199,18 @@ Configuration options
|
|
167
199
|
|
168
200
|
|
169
201
|
|_. ORM |_. How to access |_. Notes |
|
170
|
-
| Active Record | DatabaseCleaner[:active_record] | Connection specified as :symbol keys, loaded from config/database.yml |
|
202
|
+
| Active Record | DatabaseCleaner[:active_record] | Connection specified as :symbol keys, loaded from config/database.yml. You may also pass in the ActiveRecord model under the @:model@ key. |
|
171
203
|
| Data Mapper | DatabaseCleaner[:data_mapper] | Connection specified as :symbol keys, loaded via Datamapper repositories |
|
172
204
|
| Mongo Mapper | DatabaseCleaner[:mongo_mapper] | Multiple connections not yet supported |
|
173
|
-
| Mongoid | DatabaseCleaner[:mongoid] | Multiple
|
205
|
+
| Mongoid | DatabaseCleaner[:mongoid] | Multiple databases supported for Mongoid 3. Specify DatabaseCleaner[:mongoid, {:connection => :db_name}] |
|
174
206
|
| Couch Potato | DatabaseCleaner[:couch_potato] | Multiple connections not yet supported |
|
175
207
|
| Sequel | DatabaseCleaner[:sequel] | ? |
|
176
208
|
|
177
209
|
h2. Why?
|
178
210
|
|
179
|
-
One of my motivations for writing this library was to have an easy way to
|
180
|
-
|
181
|
-
|
182
|
-
will wrap each scenario in a transaction. This is great, but what if you are
|
183
|
-
using ActiveRecord in a non-rails project? You used to have to copy-and-paste
|
184
|
-
the needed code, but with DatabaseCleaner you can now say:
|
185
|
-
|
186
|
-
<pre>
|
187
|
-
#env.rb
|
188
|
-
require 'database_cleaner'
|
189
|
-
require 'database_cleaner/cucumber'
|
190
|
-
DatabaseCleaner.strategy = :transaction
|
191
|
-
</pre>
|
192
|
-
|
193
|
-
Now lets say you are running your features and it requires that another process be
|
194
|
-
involved (i.e. Selenium running against your app's server.) You can simply change
|
195
|
-
your strategy type:
|
196
|
-
|
197
|
-
<pre>
|
198
|
-
#env.rb
|
199
|
-
require 'database_cleaner'
|
200
|
-
require 'database_cleaner/cucumber'
|
201
|
-
DatabaseCleaner.strategy = :truncation
|
202
|
-
</pre>
|
203
|
-
|
204
|
-
You can have the best of both worlds and use the best one for the job:
|
205
|
-
<pre>
|
206
|
-
#env.rb
|
207
|
-
require 'database_cleaner'
|
208
|
-
require 'database_cleaner/cucumber'
|
209
|
-
DatabaseCleaner.strategy = (ENV['SELENIUM'] == 'true') ? :truncation : :transaction
|
210
|
-
</pre>
|
211
|
-
|
211
|
+
One of my motivations for writing this library was to have an easy way to turn on what Rails calls "transactional_fixtures"
|
212
|
+
in my non-rails ActiveRecord projects. After copying and pasting code to do this several times I decided to package it up
|
213
|
+
as a gem and same everyone a bit of time.
|
212
214
|
|
213
215
|
h2. Common Errors
|
214
216
|
|