parallel_rspec 2.2.0 → 2.4.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.
- checksums.yaml +4 -4
- data/CHANGES.md +9 -0
- data/README.md +3 -3
- data/lib/parallel_rspec/client.rb +36 -1
- data/lib/parallel_rspec/runner.rb +1 -0
- data/lib/parallel_rspec/tasks.rake +2 -1
- data/lib/parallel_rspec/version.rb +1 -1
- data/lib/parallel_rspec/workers.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a72d4e48cb7e1973a00e66c2fcae145cbe17c238ed051666856365716f1cd67
|
4
|
+
data.tar.gz: e4b27f1a20a0e3d329fb146592af425aa0f5887cd18fe71784c8f432e62993ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12770663bed8e75c5cd24743a177ac3ba01b3d07165dce4ef2e921219dd4a2dc62eaa013c12ffd43d0f7f2565484b0b33330249a1b46ea4e4e6d046518f5b469
|
7
|
+
data.tar.gz: e15b6a238cbf5249472eaca4fbd52073ea001f7f01ca8a41be1732cea1aa529d3c3159d5dcef22353d25815d0ea814e100785ad977fd1f2862f904dda47e2273
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 2.4.0
|
4
|
+
|
5
|
+
* Wrap Exception objects so they can always be dumped and loaded, even if they contain non-marshallable objects such as Procs or anonymous classes.
|
6
|
+
|
7
|
+
## 2.3.0
|
8
|
+
|
9
|
+
* Increase default workers from 2 to 4.
|
10
|
+
* Fix behavioral inconsistency with rspec-core in nested describe blocks on helper methods with clashing let methods.
|
11
|
+
|
3
12
|
## 2.2.0
|
4
13
|
|
5
14
|
* Fix incompatibility with `rspec --profile`.
|
data/README.md
CHANGED
@@ -28,9 +28,9 @@ This version of ParallelRSpec has been tested with RSpec 3.12.
|
|
28
28
|
|
29
29
|
## Usage
|
30
30
|
|
31
|
-
By default, ParallelRSpec will use
|
31
|
+
By default, ParallelRSpec will use four workers. If you would like to use more, set an environment variable:
|
32
32
|
|
33
|
-
$ export WORKERS=
|
33
|
+
$ export WORKERS=8
|
34
34
|
|
35
35
|
ParallelRSpec runs each worker with its own copy of the test database to avoid locking and deadlocking problems. To create these and populate them with your schema, run:
|
36
36
|
|
@@ -59,7 +59,7 @@ By default, there's a task called `parallel_rspec` which will run all specs. To
|
|
59
59
|
require 'parallel_rspec'
|
60
60
|
|
61
61
|
ParallelRSpec::RakeTask.new(:prspec) do |t|
|
62
|
-
ENV['WORKERS'] = '
|
62
|
+
ENV['WORKERS'] = '8'
|
63
63
|
t.pattern = "spec/**/*_spec.rb"
|
64
64
|
t.rspec_opts = "--tag parallel"
|
65
65
|
# etc...
|
@@ -1,4 +1,33 @@
|
|
1
1
|
module ParallelRSpec
|
2
|
+
# Some Exception objects contain non-marshallable ivars such as Proc objects. This wrapper
|
3
|
+
# represents the bits needed by RSpec's ExceptionPresenter, and can be dumped and loaded.
|
4
|
+
class ExceptionMarshallingWrapper < Exception
|
5
|
+
attr_reader :class_name, :message, :backtrace, :cause
|
6
|
+
|
7
|
+
def initialize(class_name, message, backtrace, cause)
|
8
|
+
@class_name = class_name
|
9
|
+
@message = message
|
10
|
+
@backtrace = backtrace
|
11
|
+
@cause = cause
|
12
|
+
end
|
13
|
+
|
14
|
+
def class
|
15
|
+
eval "class #{@class_name}; end; #{@class_name}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def inspect
|
19
|
+
"#<#{@class_name}: #{@message}>"
|
20
|
+
end
|
21
|
+
|
22
|
+
def ==(other)
|
23
|
+
other.is_a?(ExceptionMarshallingWrapper) &&
|
24
|
+
class_name == other.class_name &&
|
25
|
+
message == other.message &&
|
26
|
+
backtrace == other.backtrace &&
|
27
|
+
cause == other.cause
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
2
31
|
class Client
|
3
32
|
attr_reader :channel_to_server
|
4
33
|
|
@@ -39,8 +68,9 @@ module ParallelRSpec
|
|
39
68
|
end
|
40
69
|
|
41
70
|
def updates_from(example)
|
71
|
+
example.execution_result.exception = dumpable_exception(example.execution_result.exception)
|
42
72
|
{
|
43
|
-
exception: example.exception,
|
73
|
+
exception: dumpable_exception(example.exception),
|
44
74
|
metadata: example.metadata.slice(
|
45
75
|
:execution_result,
|
46
76
|
:pending,
|
@@ -49,6 +79,11 @@ module ParallelRSpec
|
|
49
79
|
}
|
50
80
|
end
|
51
81
|
|
82
|
+
def dumpable_exception(exception)
|
83
|
+
return exception if exception.nil? || exception.is_a?(ExceptionMarshallingWrapper)
|
84
|
+
ExceptionMarshallingWrapper.new(exception.class.name, exception.to_s, exception.backtrace, dumpable_exception(exception.cause))
|
85
|
+
end
|
86
|
+
|
52
87
|
def next_example_to_run
|
53
88
|
channel_to_server.write([:next_example_to_run])
|
54
89
|
channel_to_server.read
|
@@ -77,6 +77,7 @@ module ParallelRSpec
|
|
77
77
|
while next_example = client.next_example_to_run
|
78
78
|
example_group, example_index = *next_example
|
79
79
|
example = RSpec.world.filtered_examples[example_group][example_index]
|
80
|
+
example_group.parent_groups.reverse_each { |parent_group| parent_group.new("dummy instance to trigger helper loading order") }
|
80
81
|
example_group_instance = example_group.new(example.inspect_output)
|
81
82
|
success = example.run(example_group_instance, client) && success
|
82
83
|
end
|
@@ -59,7 +59,8 @@ db_namespace = namespace :db do
|
|
59
59
|
desc "Recreate the test databases from the current schema"
|
60
60
|
task :load do
|
61
61
|
db_namespace["parallel:purge"].invoke
|
62
|
-
|
62
|
+
schema_format = ActiveRecord.respond_to?(:schema_format) ? ActiveRecord.schema_format : ActiveRecord::Base.schema_format
|
63
|
+
case schema_format
|
63
64
|
when :ruby
|
64
65
|
db_namespace["parallel:load_schema"].invoke
|
65
66
|
when :sql
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parallel_rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Will Bryant, Powershop New Zealand Ltd
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-07-
|
11
|
+
date: 2023-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|