guard-rspec 4.2.3 → 4.2.4
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/README.md +10 -0
- data/lib/guard/rspec/formatter.rb +35 -3
- data/lib/guard/rspec/version.rb +1 -1
- data/spec/lib/guard/rspec/formatter_spec.rb +53 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68ca1733c0e0f32c09688a1bc91d098a383c0dfc
|
4
|
+
data.tar.gz: 683059e58e8673b87957cc8d81a971916e617b0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2b2ccf857787b9a517d8ecc25c80f608c70b374aaa488f16b143945185450c828bc77c0ca9c2ffa5c98988979a5aa9c98f7f5bd00156f26dbeceb7d88f918e5
|
7
|
+
data.tar.gz: 2a388ad2d0d7679fbd4eb2ccbe2748d43eb7d617167d54ccafc65483c854df51f5e38c6a5f7496a9aca2e946a29c7a84aae3008f3095943d38dfd84a6169b255
|
data/README.md
CHANGED
@@ -66,6 +66,16 @@ guard :rspec, cmd: 'spring rspec -f doc' do
|
|
66
66
|
end
|
67
67
|
```
|
68
68
|
|
69
|
+
### Running with bundler
|
70
|
+
|
71
|
+
Running `bundle exec guard` will not run the specs with bundler. You need to change the `cmd` option to `bundle exec rspec`:
|
72
|
+
|
73
|
+
``` ruby
|
74
|
+
guard :rspec, cmd: 'bundle exec rspec' do
|
75
|
+
# ...
|
76
|
+
end
|
77
|
+
```
|
78
|
+
|
69
79
|
### List of available options:
|
70
80
|
|
71
81
|
``` ruby
|
@@ -6,10 +6,37 @@ module Guard
|
|
6
6
|
class Formatter < ::RSpec::Core::Formatters::BaseFormatter
|
7
7
|
TEMPORARY_FILE_PATH = './tmp/rspec_guard_result'
|
8
8
|
|
9
|
+
# rspec issue https://github.com/rspec/rspec-core/issues/793
|
10
|
+
def self.extract_spec_location(metadata)
|
11
|
+
root_metadata = metadata
|
12
|
+
location = metadata[:location]
|
13
|
+
|
14
|
+
until spec_path?(location)
|
15
|
+
metadata = metadata[:example_group]
|
16
|
+
|
17
|
+
if !metadata
|
18
|
+
Guard::UI.warning "no spec file found for #{root_metadata[:location]}"
|
19
|
+
return root_metadata[:location]
|
20
|
+
end
|
21
|
+
|
22
|
+
location = (metadata[:location] || "").split(':').first # rspec issue https://github.com/rspec/rspec-core/issues/1243
|
23
|
+
end
|
24
|
+
|
25
|
+
location
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.spec_path?(path)
|
29
|
+
path ||= ""
|
30
|
+
flags = File::FNM_PATHNAME | File::FNM_DOTMATCH
|
31
|
+
if File.const_defined?(:FNM_EXTGLOB) # ruby >= 2
|
32
|
+
flags |= File::FNM_EXTGLOB
|
33
|
+
end
|
34
|
+
File.fnmatch(::RSpec.configuration.pattern, path.sub(/:\d+\z/, ''), flags)
|
35
|
+
end
|
36
|
+
|
9
37
|
# Write summary to temporary file for runner
|
10
38
|
def dump_summary(duration, total, failures, pending)
|
11
|
-
|
12
|
-
File.open(TEMPORARY_FILE_PATH, 'w') do |f|
|
39
|
+
write do |f|
|
13
40
|
f.puts _message(total, failures, pending, duration)
|
14
41
|
f.puts _failed_paths.join("\n") if failures > 0
|
15
42
|
end
|
@@ -19,9 +46,14 @@ module Guard
|
|
19
46
|
|
20
47
|
private
|
21
48
|
|
49
|
+
def write(&block)
|
50
|
+
FileUtils.mkdir_p('tmp')
|
51
|
+
File.open(TEMPORARY_FILE_PATH, 'w', &block)
|
52
|
+
end
|
53
|
+
|
22
54
|
def _failed_paths
|
23
55
|
failed = examples.select { |e| e.execution_result[:status] == 'failed' }
|
24
|
-
failed.map { |e| e.metadata
|
56
|
+
failed.map { |e| self.class.extract_spec_location(e.metadata) }.sort.uniq
|
25
57
|
end
|
26
58
|
|
27
59
|
def _message(example_count, failure_count, pending_count, duration)
|
data/lib/guard/rspec/version.rb
CHANGED
@@ -3,29 +3,76 @@ require 'spec_helper.rb'
|
|
3
3
|
require 'guard/rspec/formatter'
|
4
4
|
|
5
5
|
describe Guard::RSpec::Formatter do
|
6
|
-
let(:
|
6
|
+
let(:writer){
|
7
|
+
StringIO.new
|
8
|
+
}
|
9
|
+
let(:formatter) {
|
10
|
+
Guard::RSpec::Formatter.new(StringIO.new).tap{|formatter|
|
11
|
+
formatter.stub(:write) do |&block|
|
12
|
+
block.call writer
|
13
|
+
end
|
14
|
+
}
|
15
|
+
}
|
7
16
|
|
8
17
|
describe '#dump_summary' do
|
9
|
-
|
18
|
+
|
19
|
+
let(:result){
|
20
|
+
writer.rewind
|
21
|
+
writer.read
|
22
|
+
}
|
23
|
+
|
10
24
|
|
11
25
|
context 'with failures' do
|
26
|
+
let(:spec_filename){
|
27
|
+
'failed_location_spec.rb'
|
28
|
+
}
|
29
|
+
|
12
30
|
let(:failed_example) { double(
|
13
31
|
execution_result: { status: 'failed' },
|
14
|
-
metadata: { location:
|
32
|
+
metadata: { location: spec_filename }
|
15
33
|
) }
|
16
34
|
|
17
35
|
it 'writes summary line and failed location in tmp dir' do
|
18
36
|
allow(formatter).to receive(:examples) { [failed_example] }
|
19
37
|
formatter.dump_summary(123, 3, 1, 0)
|
20
|
-
result
|
21
|
-
expect(result).to match /^3 examples, 1 failures in 123\.0 seconds\nfailed_location\n$/
|
38
|
+
expect(result).to match /^3 examples, 1 failures in 123\.0 seconds\n#{spec_filename}\n$/
|
22
39
|
end
|
40
|
+
|
41
|
+
it 'writes only uniq filenames out' do
|
42
|
+
allow(formatter).to receive(:examples) { [failed_example, failed_example] }
|
43
|
+
formatter.dump_summary(123, 3, 1, 0)
|
44
|
+
expect(result).to match /^3 examples, 1 failures in 123\.0 seconds\n#{spec_filename}\n$/
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should find the spec file for shared examples" do
|
50
|
+
metadata = {:location => './spec/support/breadcrumbs.rb:75',
|
51
|
+
:example_group => {:location => './spec/requests/breadcrumbs_spec.rb:218'}
|
52
|
+
}
|
53
|
+
|
54
|
+
expect(described_class.extract_spec_location(metadata)).to start_with './spec/requests/breadcrumbs_spec.rb'
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should return only the spec file without line number for shared examples" do
|
58
|
+
metadata = {:location => './spec/support/breadcrumbs.rb:75',
|
59
|
+
:example_group => {:location => './spec/requests/breadcrumbs_spec.rb:218'}
|
60
|
+
}
|
61
|
+
|
62
|
+
expect(described_class.extract_spec_location(metadata)).to eq './spec/requests/breadcrumbs_spec.rb'
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return location of the root spec when a shared examples has no location" do
|
66
|
+
metadata = {:location => './spec/support/breadcrumbs.rb:75',
|
67
|
+
:example_group => {}
|
68
|
+
}
|
69
|
+
|
70
|
+
expect(described_class.extract_spec_location(metadata)).to eq metadata[:location]
|
23
71
|
end
|
24
72
|
|
25
73
|
context 'with only success' do
|
26
74
|
it 'notifies success' do
|
27
75
|
formatter.dump_summary(123, 3, 0, 0)
|
28
|
-
result = File.open('./tmp/rspec_guard_result').read
|
29
76
|
expect(result).to match /^3 examples, 0 failures in 123\.0 seconds\n$/
|
30
77
|
end
|
31
78
|
end
|
@@ -33,7 +80,6 @@ describe Guard::RSpec::Formatter do
|
|
33
80
|
context 'with pending' do
|
34
81
|
it "notifies pending too" do
|
35
82
|
formatter.dump_summary(123, 3, 0, 1)
|
36
|
-
result = File.open('./tmp/rspec_guard_result').read
|
37
83
|
expect(result).to match /^3 examples, 0 failures \(1 pending\) in 123\.0 seconds\n$/
|
38
84
|
end
|
39
85
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibaud Guillaume-Gentil
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: guard
|