test_data 0.2.2 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18d3469e9d0173f81ef3b2d8d082861094d79354b8fb544e983bdcfdd8eb788b
4
- data.tar.gz: 983a1645132b22024799670ec463f11fe5f8e0d1b9427b96940dea8c684fbafb
3
+ metadata.gz: 9e046c25f181fc9022139cd1d009142b390d7da348d9eb00dc18f03291927c35
4
+ data.tar.gz: 60dfa3ca0fbbf8389d009ceec584f2239eb01391c2e3fb88badd063669c48d28
5
5
  SHA512:
6
- metadata.gz: c7fb1b86f23f074bb185cb1cf11c437d4ba57445d65907509384838993628c5759803ee90f3f290dbb219754806bb1c1133b7e84bf430918c1a23b3fca86b752
7
- data.tar.gz: d00e512b415c74ab1650a3b3d58e36759d085056375e07326d8790d0033bc18066a2d82c791a578fb9d11cb7c08f9056d4d5e380b9cc52f97dd467c245469771
6
+ metadata.gz: 5d3727bbd0f8bf7cb3d32c042864a624c0cf5ebcd956f7abf158aeb0cabbbc97505a4c18b5f4345a8ea4570d56384532f2ecfeed03d1319850f92a61602ecb63
7
+ data.tar.gz: dab23d60d8c459bc756e532e35e7de0e499a3b760a1f3ec652d5aea866503b6ccdac670edcc0bba0fafc1cc4f7c3281b98b21760ce84b808d5c5428b25f1d64b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ # 0.3.2
2
+
3
+ - Improve the flexibility of the webpacker config generator
4
+ - Improve failure output when an error is raised during rake tests that fork
5
+ into a `test_data` env
6
+
7
+ # 0.3.1
8
+
9
+ - Loosen railties dependencies after verifying basic Rails 7 support
10
+
11
+ # 0.3.0
12
+
13
+ - Add a `test_data:reinitialize` task that will delete the `test_data` database
14
+ if necessary before invoking `test_data:initialize`
15
+ - Warn if re-initializing and the local database appears to have been dumped
16
+ or loaded from a dump that is newer than the dumps on disk
17
+ - Add a warning on app load if the dumps on disk appear
18
+ newer than the local `test_data` database
19
+
1
20
  # 0.2.2
2
21
 
3
22
  - Improve performance of Rails fixtures being repeatedly loaded by changing the
data/Gemfile.lock CHANGED
@@ -1,96 +1,96 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test_data (0.2.2)
5
- railties (~> 6.0)
4
+ test_data (0.3.2)
5
+ railties (>= 6.0, < 8.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actionpack (6.1.4)
11
- actionview (= 6.1.4)
12
- activesupport (= 6.1.4)
13
- rack (~> 2.0, >= 2.0.9)
10
+ actionpack (7.0.2.3)
11
+ actionview (= 7.0.2.3)
12
+ activesupport (= 7.0.2.3)
13
+ rack (~> 2.0, >= 2.2.0)
14
14
  rack-test (>= 0.6.3)
15
15
  rails-dom-testing (~> 2.0)
16
16
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
17
- actionview (6.1.4)
18
- activesupport (= 6.1.4)
17
+ actionview (7.0.2.3)
18
+ activesupport (= 7.0.2.3)
19
19
  builder (~> 3.1)
20
20
  erubi (~> 1.4)
21
21
  rails-dom-testing (~> 2.0)
22
22
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
23
- activesupport (6.1.4)
23
+ activesupport (7.0.2.3)
24
24
  concurrent-ruby (~> 1.0, >= 1.0.2)
25
25
  i18n (>= 1.6, < 2)
26
26
  minitest (>= 5.1)
27
27
  tzinfo (~> 2.0)
28
- zeitwerk (~> 2.3)
29
28
  ast (2.4.2)
30
29
  builder (3.2.4)
31
30
  coderay (1.1.3)
32
- concurrent-ruby (1.1.9)
31
+ concurrent-ruby (1.1.10)
33
32
  crass (1.0.6)
34
33
  erubi (1.10.0)
35
- i18n (1.8.10)
34
+ i18n (1.10.0)
36
35
  concurrent-ruby (~> 1.0)
37
- loofah (2.11.0)
36
+ loofah (2.16.0)
38
37
  crass (~> 1.0.2)
39
38
  nokogiri (>= 1.5.9)
40
39
  method_source (1.0.0)
41
- mini_portile2 (2.6.1)
42
- minitest (5.14.4)
43
- nokogiri (1.12.0)
44
- mini_portile2 (~> 2.6.1)
40
+ mini_portile2 (2.8.0)
41
+ minitest (5.15.0)
42
+ nokogiri (1.13.3)
43
+ mini_portile2 (~> 2.8.0)
45
44
  racc (~> 1.4)
46
- parallel (1.20.1)
47
- parser (3.0.1.0)
45
+ parallel (1.22.1)
46
+ parser (3.1.1.0)
48
47
  ast (~> 2.4.1)
49
48
  pry (0.14.1)
50
49
  coderay (~> 1.1)
51
50
  method_source (~> 1.0)
52
- racc (1.5.2)
51
+ racc (1.6.0)
53
52
  rack (2.2.3)
54
53
  rack-test (1.1.0)
55
54
  rack (>= 1.0, < 3)
56
55
  rails-dom-testing (2.0.3)
57
56
  activesupport (>= 4.2.0)
58
57
  nokogiri (>= 1.6)
59
- rails-html-sanitizer (1.3.0)
58
+ rails-html-sanitizer (1.4.2)
60
59
  loofah (~> 2.3)
61
- railties (6.1.4)
62
- actionpack (= 6.1.4)
63
- activesupport (= 6.1.4)
60
+ railties (7.0.2.3)
61
+ actionpack (= 7.0.2.3)
62
+ activesupport (= 7.0.2.3)
64
63
  method_source
65
- rake (>= 0.13)
64
+ rake (>= 12.2)
66
65
  thor (~> 1.0)
67
- rainbow (3.0.0)
68
- rake (13.0.3)
69
- regexp_parser (2.1.1)
66
+ zeitwerk (~> 2.5)
67
+ rainbow (3.1.1)
68
+ rake (13.0.6)
69
+ regexp_parser (2.3.0)
70
70
  rexml (3.2.5)
71
- rubocop (1.12.1)
71
+ rubocop (1.26.1)
72
72
  parallel (~> 1.10)
73
- parser (>= 3.0.0.0)
73
+ parser (>= 3.1.0.0)
74
74
  rainbow (>= 2.2.2, < 4.0)
75
75
  regexp_parser (>= 1.8, < 3.0)
76
76
  rexml
77
- rubocop-ast (>= 1.2.0, < 2.0)
77
+ rubocop-ast (>= 1.16.0, < 2.0)
78
78
  ruby-progressbar (~> 1.7)
79
79
  unicode-display_width (>= 1.4.0, < 3.0)
80
- rubocop-ast (1.4.1)
81
- parser (>= 2.7.1.5)
82
- rubocop-performance (1.10.1)
83
- rubocop (>= 0.90.0, < 2.0)
80
+ rubocop-ast (1.17.0)
81
+ parser (>= 3.1.1.0)
82
+ rubocop-performance (1.13.3)
83
+ rubocop (>= 1.7.0, < 2.0)
84
84
  rubocop-ast (>= 0.4.0)
85
85
  ruby-progressbar (1.11.0)
86
- standard (1.0.5)
87
- rubocop (= 1.12.1)
88
- rubocop-performance (= 1.10.1)
89
- thor (1.1.0)
86
+ standard (1.9.1)
87
+ rubocop (= 1.26.1)
88
+ rubocop-performance (= 1.13.3)
89
+ thor (1.2.1)
90
90
  tzinfo (2.0.4)
91
91
  concurrent-ruby (~> 1.0)
92
- unicode-display_width (2.0.0)
93
- zeitwerk (2.4.2)
92
+ unicode-display_width (2.1.0)
93
+ zeitwerk (2.5.4)
94
94
 
95
95
  PLATFORMS
96
96
  ruby
@@ -103,4 +103,4 @@ DEPENDENCIES
103
103
  test_data!
104
104
 
105
105
  BUNDLED WITH
106
- 2.2.15
106
+ 2.3.10
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2021 Test Double, LLC
1
+ Copyright (c) 2021 Test Double, Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -19,8 +19,8 @@ What it does:
19
19
  app**
20
20
 
21
21
  * Exposes a simple API for ensuring that your data will be pristine for each of
22
- your tests, whether the test depends on test_data, an empty database, or Rails
23
- fixtures
22
+ your tests, whether the test depends on test_data, factories, fixtures, or an
23
+ empty database
24
24
 
25
25
  * Safeguards your tests from flaky failures and supercharges your build by
26
26
  providing a sophisticated transaction manager that isolates each test while
@@ -41,11 +41,11 @@ are required**—so it may not work for every project just yet.]_
41
41
 
42
42
  This gem requires a lot of documentation—not because `test_data` does a lot of
43
43
  things, but because managing one's test data is an inherently complex task. If
44
- one reason Rails apps chronically suffer from slow tests is that other
45
- approaches oversimplify test data management, it stands to reason that any
46
- discomfort caused by `test_data`'s scope may not be _unnecessary complexity_ but
47
- instead be an indication of how little of the problem's _essential complexity_
48
- we have reckoned with to this point.
44
+ there's one reason Rails apps often suffer from slow tests, it's that the most
45
+ popular approaches to test data management oversimplify the problem—they might
46
+ save time up front, but tend to cost you later. The `test_data` gem, meanwhile,
47
+ is designed to tackle the problem head on: it takes longer to set up, but it'll
48
+ scale along with your application for years to come.
49
49
 
50
50
  1. [Getting Started Guide](#getting-started-guide)
51
51
  1. [Install and initialize `test_data`](#step-1-install-and-initialize-test_data)
@@ -61,6 +61,7 @@ we have reckoned with to this point.
61
61
  * [test_data:configure](#test_dataconfigure)
62
62
  * [test_data:verify_config](#test_dataverify_config)
63
63
  * [test_data:initialize](#test_datainitialize)
64
+ * [test_data:reinitialize](#test_datareinitialize)
64
65
  * [test_data:dump](#test_datadump)
65
66
  * [test_data:load](#test_dataload)
66
67
  * [test_data:create_database](#test_datacreate_database)
@@ -105,22 +106,42 @@ And if you get stuck or need help as you're getting started, please feel free to
105
106
 
106
107
  ### Step 1: Install and initialize `test_data`
107
108
 
108
- #### Adding the gem
109
+ #### Adding a `:test_data` group to your Gemfile
110
+
111
+ Before even installing anything, it's important to understand that because
112
+ `test_data` defines a new Rails environment and because Rails expects
113
+ a gem group (like `:development`, `:test`, and `:production`) for each
114
+ environment, any gems we want to be available to the `test_data` gem need to be
115
+ installed with a `:test_data` group.
116
+
117
+ Since the `test_data` environment is designed to be used similarly to
118
+ `development` (i.e. with a running server and interacting via a browser), any
119
+ gems in your `:development` gem group should likely be included in a
120
+ `:test_data` gem group as well.
109
121
 
110
- First, add `test_data` to your Gemfile. Either include it in all groups or add
111
- it to the `:development`, `:test`, and (the all new!) `:test_data` gem groups:
122
+ For example, this:
112
123
 
113
124
  ```ruby
114
- group :development, :test, :test_data do
125
+ group :development, :test do
126
+ gem "standard"
127
+ gem "cypress-rails"
115
128
  gem "test_data"
116
- # … other gems available to development & test
117
129
  end
118
130
  ```
119
131
 
120
- Since the `test_data` environment is designed to be used similarly to
121
- `development` (i.e. with a running server and interacting via a browser), any
122
- gems in your `:development` gem group should likely be included in a
123
- `:test_data` gem group as well.
132
+ Should have its first line changed to:
133
+
134
+ ```ruby
135
+ group :development, :test, :test_data do
136
+ ```
137
+
138
+ #### Adding the gem
139
+
140
+ Finally, add `test_data` to your Gemfile and `bundle install` it:
141
+
142
+ ```ruby
143
+ gem "test_data"
144
+ ```
124
145
 
125
146
  #### Configuring the gem and initializing the database
126
147
 
@@ -430,23 +451,21 @@ to update your test data. Here's how to do it:
430
451
  1. Be sure there's nothing in your local `test_data` database that you added
431
452
  intentionally and forgot to dump, because it's about to be erased
432
453
 
433
- 2. Run `rake test_data:drop_database`
434
-
435
- 3. Run `rake test_data:load` to recreate the `test_data` database and load
436
- the latest SQL dumps into it
454
+ 2. Run `rake test_data:reinitialize` drop and recreate the `test_data`
455
+ database and load the latest SQL dumps into it
437
456
 
438
- 4. Run any pending migrations with `RAILS_ENV=test_data bin/rake db:migrate`
457
+ 3. Run any pending migrations with `RAILS_ENV=test_data bin/rake db:migrate`
439
458
 
440
- 5. If you need to create any additional data, start up the server
459
+ 4. If you need to create any additional data, start up the server
441
460
  (`RAILS_ENV=test_data bin/rails s`), just like in [Step
442
461
  2](#step-2-create-some-test-data)
443
462
 
444
- 6. Export your newly-updated `test_data` database with `rake test_data:dump`
463
+ 5. Export your newly-updated `test_data` database with `rake test_data:dump`
445
464
 
446
- 7. Ensure your tests are passing and then commit the resulting SQL files
465
+ 6. Ensure your tests are passing and then commit the resulting SQL files
447
466
 
448
467
  * If the local `test_data` database is already up-to-date with the current SQL
449
- dumps, follow steps **4 through 7** above
468
+ dumps, follow steps **3 through 6** above
450
469
 
451
470
  It's important to keep in mind that your test data SQL dumps are a shared,
452
471
  generated resource among your team (just like a `structure.sql` or `schema.rb`
@@ -664,6 +683,18 @@ your seed file. Specifically:
664
683
  * Otherwise, it invokes the task `db:schema:load` and `db:seed` (similar to
665
684
  Rails' built-in `db:setup` task)
666
685
 
686
+ ### test_data:reinitialize
687
+
688
+ This task is designed for the situation where you may already have a `test_data`
689
+ database created and simply want to drop it and replace it with whatever dumps
690
+ are in the `test/support/test_data` directory.
691
+
692
+ Dropping the database requires confirmation, either interactively or by setting
693
+ the environment variable `TEST_DATA_CONFIRM`. It will additionally warn you in
694
+ the event that the local database appears to be newer than the dumps on disk
695
+ that would replace it. From there, this task behaves the same way as `rake
696
+ test_data:initialize`.
697
+
667
698
  ### test_data:dump
668
699
 
669
700
  This task is designed to be run after you've created or updated your test data
@@ -775,8 +806,8 @@ There are two additional things to keep in mind if using this method:
775
806
 
776
807
  1. Using this feature requires that you've first invoked
777
808
  [TestData.prevent_rails_fixtures_from_loading_automatically!](#testdataprevent_rails_fixtures_from_loading_automatically)
778
- to override Rails' default behavior before any of your tests have loaded or
779
- started running
809
+ before your tests have started running to override Rails' default behavior
810
+ before any of your tests have loaded or started running
780
811
 
781
812
  2. Because the method depends on Rails' fixture caching mechanism, it must be
782
813
  passed an instance of the running test class (e.g.
@@ -1227,20 +1258,9 @@ result in a significantly slower overall test suite. Instead, if you group tests
1227
1258
  that use the same type of test data together (e.g. by separating them into
1228
1259
  separate suites), you might find profound speed gains.
1229
1260
 
1230
- To illustrate why, suppose you have 5 tests that call `TestData.uses_test_data`
1231
- and 5 that call `TestData.uses_rails_fixtures`. If a test that calls
1232
- `TestData.uses_test_data` is followed by another that calls `uses_test_data`,
1233
- the only operation needed by the second call will be a rollback to the savepoint
1234
- taken after the test data was loaded. If, however, a `uses_test_data` test is
1235
- followed by a `uses_rails_fixtures` test, then a lot more work is required:
1236
- first a rollback, then the truncation of the test data, then a load of the
1237
- fixtures followed by creation of a new savepoint—which would in tunr be undone
1238
- again if the _next_ test happened to call `uses_test_data`. Switching between
1239
- tests that use different sources of test data can cause significant unnecessary
1240
- thrashing.
1241
-
1242
- To illustrate the above, if all of these tests ran in random order (the
1243
- default), you might see:
1261
+ To illustrate this, suppose you had 5 tests that relied on your `test_data` data
1262
+ and 5 that relied on Rails fixtures. If all of these tests ran in random order
1263
+ (the default), you might see the following behavior at run-time:
1244
1264
 
1245
1265
  ```
1246
1266
  $ bin/rails test test/example_test.rb
@@ -1272,9 +1292,11 @@ data into sub-suites that are run serially, on e after the other.
1272
1292
  [minitest-suite](https://github.com/testdouble/minitest-suite) to accomplish
1273
1293
  exactly this. Just declare something like `suite :test_data` or `suite
1274
1294
  :fixtures` at the top of each test class
1275
- * If you're using RSpec, the
1276
- [tag](https://relishapp.com/rspec/rspec-core/v/3-10/docs/command-line/tag-option)
1277
- feature can help you organize your tests by type, but you'll likely have to
1295
+ * If you're using RSpec, the [suite option combined with a custom
1296
+ ordering](https://gist.github.com/myronmarston/8fea012b9eb21b637335bb29069bce6b)
1297
+ can accomplish this. You might also consider using
1298
+ [tags](https://relishapp.com/rspec/rspec-core/v/3-10/docs/command-line/tag-option)
1299
+ to organize your tests by type, but you'll likely have to
1278
1300
  run a separate CLI invocation for each to avoid the tests from being
1279
1301
  interleaved
1280
1302