guard-rspec 4.3.1 → 4.4.1
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/.hound.yml +262 -0
- data/.rspec +2 -0
- data/.rubocop.yml +2 -0
- data/.rubocop_todo.yml +10 -0
- data/.travis.yml +2 -3
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +9 -2
- data/Guardfile +11 -4
- data/README.md +8 -4
- data/Rakefile +23 -2
- data/gemfiles/Gemfile.rspec-2.14 +1 -0
- data/gemfiles/Gemfile.rspec-2.99 +14 -0
- data/gemfiles/Gemfile.rspec-3.0 +1 -0
- data/guard-rspec.gemspec +18 -16
- data/lib/guard/rspec.rb +13 -8
- data/lib/guard/rspec/command.rb +30 -12
- data/lib/guard/rspec/deprecator.rb +32 -11
- data/lib/guard/rspec/inspectors/base_inspector.rb +36 -15
- data/lib/guard/rspec/inspectors/factory.rb +7 -8
- data/lib/guard/rspec/inspectors/focused_inspector.rb +2 -2
- data/lib/guard/rspec/inspectors/keeping_inspector.rb +7 -6
- data/lib/guard/rspec/inspectors/simple_inspector.rb +3 -3
- data/lib/guard/rspec/notifier.rb +9 -5
- data/lib/guard/rspec/options.rb +12 -10
- data/lib/guard/rspec/runner.rb +41 -25
- data/lib/guard/rspec/templates/Guardfile +43 -15
- data/lib/guard/rspec/version.rb +1 -1
- data/lib/guard/rspec_formatter.rb +111 -0
- data/spec/lib/guard/rspec/command_spec.rb +48 -12
- data/spec/lib/guard/rspec/deprecator_spec.rb +37 -18
- data/spec/lib/guard/rspec/inspectors/base_inspector_spec.rb +129 -18
- data/spec/lib/guard/rspec/inspectors/factory_spec.rb +20 -15
- data/spec/lib/guard/rspec/inspectors/focused_inspector_spec.rb +79 -13
- data/spec/lib/guard/rspec/inspectors/keeping_inspector_spec.rb +103 -33
- data/spec/lib/guard/rspec/inspectors/shared_examples.rb +93 -31
- data/spec/lib/guard/rspec/inspectors/simple_inspector_spec.rb +52 -16
- data/spec/lib/guard/rspec/notifier_spec.rb +49 -27
- data/spec/lib/guard/rspec/runner_spec.rb +120 -77
- data/spec/lib/guard/rspec_formatter_spec.rb +144 -0
- data/spec/lib/guard/rspec_spec.rb +23 -18
- data/spec/spec_helper.rb +99 -14
- metadata +12 -7
- data/lib/guard/rspec/formatter.rb +0 -99
- data/spec/lib/guard/rspec/formatter_spec.rb +0 -122
@@ -1,58 +1,120 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
let(:spec_paths) { %w[spec myspec] }
|
5
|
-
let(:options) { { custom: 'value', spec_paths: spec_paths } }
|
1
|
+
RSpec.shared_examples "inspector" do |klass|
|
2
|
+
let(:spec_paths) { %w(spec myspec) }
|
3
|
+
let(:options) { { custom: "value", spec_paths: spec_paths } }
|
6
4
|
let(:inspector) { klass.new(options) }
|
7
5
|
|
8
6
|
# Use real paths because BaseInspector#_clean will be used to clean them
|
9
|
-
let(:paths)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
7
|
+
let(:paths) do
|
8
|
+
[
|
9
|
+
"spec/lib/guard/rspec/inspectors/base_inspector_spec.rb",
|
10
|
+
"spec/lib/guard/rspec/runner_spec.rb",
|
11
|
+
"spec/lib/guard/rspec/deprecator_spec.rb"
|
12
|
+
]
|
13
|
+
end
|
14
|
+
let(:failed_locations) do
|
15
|
+
[
|
16
|
+
"./spec/lib/guard/rspec/runner_spec.rb:12",
|
17
|
+
"./spec/lib/guard/rspec/deprecator_spec.rb:55"
|
18
|
+
]
|
19
|
+
end
|
20
|
+
|
21
|
+
describe ".initialize" do
|
22
|
+
it "sets options and spec_paths" do
|
21
23
|
expect(inspector.options).to include(:custom, :spec_paths)
|
22
|
-
expect(inspector.options[:custom]).to eq(
|
24
|
+
expect(inspector.options[:custom]).to eq("value")
|
23
25
|
expect(inspector.spec_paths).to eq(spec_paths)
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
27
|
-
describe
|
28
|
-
|
29
|
+
describe "#paths" do
|
30
|
+
before do
|
31
|
+
allow(Dir).to receive(:[]).with("myspec/**{,/*/**}/*[_.]spec.rb").
|
32
|
+
and_return([])
|
33
|
+
|
34
|
+
allow(Dir).to receive(:[]).with("myspec/**{,/*/**}/*.feature").
|
35
|
+
and_return([])
|
36
|
+
|
37
|
+
allow(Dir).to receive(:[]).with("spec/**{,/*/**}/*.feature").
|
38
|
+
and_return([])
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns paths when called first time" do
|
42
|
+
allow(File).to receive(:directory?).
|
43
|
+
with("spec/lib/guard/rspec/inspectors/base_inspector_spec.rb").
|
44
|
+
and_return(false)
|
45
|
+
|
46
|
+
allow(File).to receive(:directory?).
|
47
|
+
with("spec/lib/guard/rspec/runner_spec.rb").
|
48
|
+
and_return(false)
|
49
|
+
|
50
|
+
allow(File).to receive(:directory?).
|
51
|
+
with("spec/lib/guard/rspec/deprecator_spec.rb").
|
52
|
+
and_return(false)
|
53
|
+
|
54
|
+
allow(Dir).to receive(:[]).with("spec/**{,/*/**}/*[_.]spec.rb").
|
55
|
+
and_return(paths)
|
56
|
+
|
29
57
|
expect(inspector.paths(paths)).to match_array(paths)
|
30
58
|
end
|
31
59
|
|
32
|
-
it
|
33
|
-
paths = %w
|
60
|
+
it "does not return non-spec paths" do
|
61
|
+
paths = %w(not_a_spec_path.rb spec/not_exist_spec.rb)
|
62
|
+
|
63
|
+
allow(File).to receive(:directory?).with("not_a_spec_path.rb").
|
64
|
+
and_return(false)
|
65
|
+
|
66
|
+
allow(File).to receive(:directory?).with("spec/not_exist_spec.rb").
|
67
|
+
and_return(false)
|
68
|
+
|
69
|
+
allow(Dir).to receive(:[]).with("spec/**{,/*/**}/*[_.]spec.rb").
|
70
|
+
and_return([])
|
71
|
+
|
34
72
|
expect(inspector.paths(paths)).to eq([])
|
35
73
|
end
|
36
74
|
|
37
|
-
it
|
38
|
-
|
75
|
+
it "uniq and compact paths" do
|
76
|
+
allow(File).to receive(:directory?).
|
77
|
+
with("spec/lib/guard/rspec/inspectors/base_inspector_spec.rb").
|
78
|
+
and_return(false)
|
79
|
+
|
80
|
+
allow(File).to receive(:directory?).
|
81
|
+
with("spec/lib/guard/rspec/runner_spec.rb").
|
82
|
+
and_return(false)
|
83
|
+
|
84
|
+
allow(File).to receive(:directory?).
|
85
|
+
with("spec/lib/guard/rspec/deprecator_spec.rb").
|
86
|
+
and_return(false)
|
87
|
+
|
88
|
+
allow(Dir).to receive(:[]).with("spec/**{,/*/**}/*[_.]spec.rb").
|
89
|
+
and_return(paths)
|
90
|
+
|
91
|
+
expect(inspector.paths(paths + paths + [nil, nil, nil])).
|
92
|
+
to match_array(paths)
|
39
93
|
end
|
40
94
|
|
41
95
|
# NOTE: I'm not sure that it is totally correct behaviour
|
42
|
-
it
|
43
|
-
|
44
|
-
|
96
|
+
it "return spec_paths and directories too" do
|
97
|
+
allow(File).to receive(:directory?).with("myspec").and_return(true)
|
98
|
+
allow(File).to receive(:directory?).with("lib/guard").and_return(true)
|
99
|
+
allow(File).to receive(:directory?).
|
100
|
+
with("not_exist_dir").and_return(false)
|
101
|
+
|
102
|
+
allow(Dir).to receive(:[]).with("spec/**{,/*/**}/*[_.]spec.rb").
|
103
|
+
and_return([])
|
104
|
+
|
105
|
+
paths = %w(myspec lib/guard not_exist_dir)
|
106
|
+
expect(inspector.paths(paths)).to match_array(paths - ["not_exist_dir"])
|
45
107
|
end
|
46
108
|
end
|
47
109
|
|
48
|
-
describe
|
49
|
-
it
|
110
|
+
describe "#failed" do
|
111
|
+
it "is callable" do
|
50
112
|
expect { inspector.failed(failed_locations) }.not_to raise_error
|
51
113
|
end
|
52
114
|
end
|
53
115
|
|
54
|
-
describe
|
55
|
-
it
|
116
|
+
describe "#reload" do
|
117
|
+
it "is callable" do
|
56
118
|
expect { inspector.reload }.not_to raise_error
|
57
119
|
end
|
58
120
|
end
|
@@ -1,23 +1,59 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require "guard/compat/test/helper"
|
2
|
+
|
3
|
+
require "lib/guard/rspec/inspectors/shared_examples"
|
4
|
+
|
5
|
+
require "guard/rspec/inspectors/simple_inspector"
|
3
6
|
|
4
7
|
klass = Guard::RSpec::Inspectors::SimpleInspector
|
5
8
|
|
6
|
-
describe klass do
|
7
|
-
include_examples
|
9
|
+
RSpec.describe klass do
|
10
|
+
include_examples "inspector", klass
|
8
11
|
|
9
12
|
# Use real paths because BaseInspector#_clean will be used to clean them
|
10
|
-
let(:other_paths)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
13
|
+
let(:other_paths) do
|
14
|
+
[
|
15
|
+
"spec/lib/guard/rspec/inspectors/simple_inspector_spec.rb",
|
16
|
+
"spec/lib/guard/rspec/runner_spec.rb"
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns paths and do not bothers about failed locations" do
|
21
|
+
allow(File).to receive(:directory?).
|
22
|
+
with("spec/lib/guard/rspec/inspectors/base_inspector_spec.rb").
|
23
|
+
and_return(false)
|
24
|
+
|
25
|
+
allow(File).to receive(:directory?).
|
26
|
+
with("spec/lib/guard/rspec/inspectors/simple_inspector_spec.rb").
|
27
|
+
and_return(false)
|
28
|
+
|
29
|
+
allow(File).to receive(:directory?).
|
30
|
+
with("spec/lib/guard/rspec/runner_spec.rb").
|
31
|
+
and_return(false)
|
32
|
+
|
33
|
+
allow(File).to receive(:directory?).
|
34
|
+
with("spec/lib/guard/rspec/deprecator_spec.rb").
|
35
|
+
and_return(false)
|
36
|
+
|
37
|
+
allow(Dir).to receive(:[]).with("spec/**{,/*/**}/*[_.]spec.rb").
|
38
|
+
and_return(paths + other_paths)
|
39
|
+
|
40
|
+
allow(Dir).to receive(:[]).with("spec/**{,/*/**}/*.feature").
|
41
|
+
and_return([])
|
42
|
+
|
43
|
+
allow(Dir).to receive(:[]).with("myspec/**{,/*/**}/*[_.]spec.rb").
|
44
|
+
and_return([])
|
45
|
+
|
46
|
+
allow(Dir).to receive(:[]).with("myspec/**{,/*/**}/*.feature").
|
47
|
+
and_return([])
|
48
|
+
|
49
|
+
expect(inspector.paths(paths)).to eq(paths)
|
50
|
+
inspector.failed(failed_locations)
|
51
|
+
expect(inspector.paths(other_paths)).to eq(other_paths)
|
52
|
+
inspector.failed([])
|
53
|
+
|
54
|
+
expect(inspector.paths(paths)).to eq(paths)
|
55
|
+
inspector.failed(failed_locations)
|
56
|
+
expect(inspector.paths(other_paths)).to eq(other_paths)
|
57
|
+
inspector.failed([])
|
22
58
|
end
|
23
59
|
end
|
@@ -1,68 +1,90 @@
|
|
1
|
-
require
|
1
|
+
require "guard/compat/test/helper"
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require "guard/rspec/notifier"
|
4
|
+
|
5
|
+
RSpec.describe Guard::RSpec::Notifier do
|
6
|
+
let(:options) { { notification: true, title: "RSpec results" } }
|
5
7
|
let(:notifier) { Guard::RSpec::Notifier.new(options) }
|
6
8
|
|
7
|
-
def expect_notification(message, image, priority)
|
8
|
-
expect(Guard::Notifier).
|
9
|
+
def expect_notification(title = "RSpec results", message, image, priority)
|
10
|
+
expect(Guard::Notifier).
|
11
|
+
to receive(:notify).
|
12
|
+
with(message, title: title, image: image, priority: priority)
|
9
13
|
end
|
10
14
|
|
11
|
-
describe
|
12
|
-
it
|
13
|
-
expect_notification(
|
15
|
+
describe "#notify_failure" do
|
16
|
+
it "notifies about failure" do
|
17
|
+
expect_notification("Failed", :failed, 2)
|
14
18
|
notifier.notify_failure
|
15
19
|
end
|
20
|
+
|
21
|
+
context "with a custom title" do
|
22
|
+
let(:options) { { notification: true, title: "Failure title" } }
|
23
|
+
|
24
|
+
it "notifies with the title" do
|
25
|
+
expect_notification("Failure title", "Failed", :failed, 2)
|
26
|
+
notifier.notify_failure
|
27
|
+
end
|
28
|
+
end
|
16
29
|
end
|
17
30
|
|
18
|
-
describe
|
19
|
-
it
|
20
|
-
expect_notification(
|
21
|
-
notifier.notify(
|
31
|
+
describe "#notify" do
|
32
|
+
it "notifies about success" do
|
33
|
+
expect_notification("This is summary", :success, -2)
|
34
|
+
notifier.notify("This is summary")
|
22
35
|
end
|
23
36
|
|
24
|
-
context
|
25
|
-
let(:summary) {
|
37
|
+
context "with pendings" do
|
38
|
+
let(:summary) { "5 examples, 0 failures (1 pending) in 4.0000 seconds" }
|
26
39
|
|
27
|
-
it
|
40
|
+
it "notifies about pendings" do
|
28
41
|
expect_notification(summary, :pending, -1)
|
29
42
|
notifier.notify(summary)
|
30
43
|
end
|
31
44
|
end
|
32
45
|
|
33
|
-
context
|
34
|
-
let(:summary) {
|
46
|
+
context "with failures" do
|
47
|
+
let(:summary) { "5 examples, 1 failures in 4.0000 seconds" }
|
35
48
|
|
36
|
-
it
|
49
|
+
it "notifies about failures" do
|
37
50
|
expect_notification(summary, :failed, 2)
|
38
51
|
notifier.notify(summary)
|
39
52
|
end
|
40
53
|
|
41
|
-
context
|
42
|
-
let(:summary) {
|
54
|
+
context "even if there is pendings" do
|
55
|
+
let(:summary) { "5 examples, 1 failures (1 pending) in 4.0000 seconds" }
|
43
56
|
|
44
|
-
it
|
57
|
+
it "still notifies about failures" do
|
45
58
|
expect_notification(summary, :failed, 2)
|
46
59
|
notifier.notify(summary)
|
47
60
|
end
|
48
61
|
end
|
49
62
|
end
|
63
|
+
|
64
|
+
context "with a custom title" do
|
65
|
+
let(:options) { { notification: true, title: "Custom title" } }
|
66
|
+
|
67
|
+
it "notifies with the title" do
|
68
|
+
expect_notification("Custom title", "This is summary", :success, -2)
|
69
|
+
notifier.notify("This is summary")
|
70
|
+
end
|
71
|
+
end
|
50
72
|
end
|
51
73
|
|
52
|
-
context
|
74
|
+
context "with notifications turned off" do
|
53
75
|
let(:options) { { notification: false } }
|
54
76
|
|
55
|
-
describe
|
56
|
-
it
|
77
|
+
describe "#notify_failure" do
|
78
|
+
it "keeps quiet" do
|
57
79
|
expect(Guard::Notifier).not_to receive(:notify)
|
58
80
|
notifier.notify_failure
|
59
81
|
end
|
60
82
|
end
|
61
83
|
|
62
|
-
describe
|
63
|
-
it
|
84
|
+
describe "#notify" do
|
85
|
+
it "keeps quiet" do
|
64
86
|
expect(Guard::Notifier).not_to receive(:notify)
|
65
|
-
notifier.notify(
|
87
|
+
notifier.notify("Summary")
|
66
88
|
end
|
67
89
|
end
|
68
90
|
end
|
@@ -1,195 +1,238 @@
|
|
1
|
-
require
|
2
|
-
require 'launchy'
|
1
|
+
require "guard/compat/test/helper"
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
require "launchy"
|
4
|
+
|
5
|
+
require "guard/rspec/runner"
|
6
|
+
|
7
|
+
RSpec.describe Guard::RSpec::Runner do
|
8
|
+
let(:options) { { cmd: "rspec" } }
|
6
9
|
let(:runner) { Guard::RSpec::Runner.new(options) }
|
7
10
|
let(:inspector) { double(Guard::RSpec::Inspectors::SimpleInspector) }
|
8
11
|
let(:notifier) { double(Guard::RSpec::Notifier) }
|
9
|
-
|
10
|
-
before
|
12
|
+
|
13
|
+
before do
|
11
14
|
allow(Guard::UI).to receive(:info)
|
12
15
|
allow(Kernel).to receive(:system) { true }
|
13
16
|
allow(Guard::RSpec::Inspectors::Factory).to receive(:create) { inspector }
|
14
17
|
allow(Guard::RSpec::Notifier).to receive(:new) { notifier }
|
15
|
-
allow(Guard::RSpec::Command).to receive(:new) {
|
18
|
+
allow(Guard::RSpec::Command).to receive(:new) { "rspec" }
|
16
19
|
allow(notifier).to receive(:notify)
|
17
20
|
allow(notifier).to receive(:notify_failure)
|
18
|
-
}
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
+
$CHILD_STATUS = double("exitstatus", exitstatus: 0)
|
23
|
+
end
|
24
|
+
|
25
|
+
describe ".initialize" do
|
26
|
+
context "with custom options" do
|
22
27
|
let(:options) { { foo: :bar } }
|
23
28
|
|
24
|
-
it
|
25
|
-
expect(Guard::RSpec::Inspectors::Factory).
|
29
|
+
it "instanciates inspector via Inspectors::Factory with custom options" do
|
30
|
+
expect(Guard::RSpec::Inspectors::Factory).
|
31
|
+
to receive(:create).with(foo: :bar)
|
26
32
|
runner
|
27
33
|
end
|
28
34
|
|
29
|
-
it
|
35
|
+
it "instanciates notifier with custom options" do
|
30
36
|
expect(Guard::RSpec::Notifier).to receive(:new).with(foo: :bar)
|
31
37
|
runner
|
32
38
|
end
|
33
39
|
end
|
34
40
|
end
|
35
41
|
|
36
|
-
describe
|
42
|
+
describe "#reload" do
|
37
43
|
it 'calls inspector\'s #reload' do
|
38
44
|
expect(inspector).to receive(:reload)
|
39
45
|
runner.reload
|
40
46
|
end
|
41
47
|
end
|
42
48
|
|
43
|
-
shared_examples
|
44
|
-
it
|
49
|
+
shared_examples "abort" do
|
50
|
+
it "aborts" do
|
45
51
|
expect(Guard::UI).to_not receive(:info)
|
46
52
|
subject
|
47
53
|
end
|
48
54
|
|
49
|
-
it
|
55
|
+
it "returns true" do
|
50
56
|
expect(subject).to be true
|
51
57
|
end
|
52
58
|
end
|
53
59
|
|
54
|
-
describe
|
55
|
-
let(:options)
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
60
|
+
describe "#run_all" do
|
61
|
+
let(:options) do
|
62
|
+
{
|
63
|
+
spec_paths: %w(spec1 spec2),
|
64
|
+
cmd: "rspec",
|
65
|
+
run_all: { message: "Custom message" }
|
66
|
+
}
|
67
|
+
end
|
61
68
|
|
62
|
-
|
63
|
-
|
69
|
+
before do
|
70
|
+
allow(inspector).to receive(:failed)
|
71
|
+
allow(File).to receive(:readlines).and_return([])
|
72
|
+
end
|
73
|
+
|
74
|
+
it "builds commands with spec paths" do
|
75
|
+
expect(Guard::RSpec::Command).to receive(:new).
|
76
|
+
with(%w(spec1 spec2), kind_of(Hash))
|
64
77
|
runner.run_all
|
65
78
|
end
|
66
79
|
|
67
|
-
it
|
68
|
-
expect(Guard::UI).to receive(:info).with(
|
80
|
+
it "prints message" do
|
81
|
+
expect(Guard::UI).to receive(:info).with("Custom message", reset: true)
|
69
82
|
runner.run_all
|
70
83
|
end
|
71
84
|
|
72
|
-
context
|
85
|
+
context "when no paths are given" do
|
73
86
|
subject { runner.run_all }
|
74
87
|
|
75
|
-
let(:options)
|
76
|
-
|
77
|
-
|
78
|
-
|
88
|
+
let(:options) do
|
89
|
+
{
|
90
|
+
spec_paths: [],
|
91
|
+
run_all: { message: "Custom message" }
|
92
|
+
}
|
93
|
+
end
|
79
94
|
|
80
|
-
include_examples
|
95
|
+
include_examples "abort"
|
81
96
|
end
|
82
97
|
|
83
|
-
context
|
84
|
-
before
|
85
|
-
options[:run_all][:cmd] =
|
86
|
-
|
98
|
+
context "with custom cmd" do
|
99
|
+
before do
|
100
|
+
options[:run_all][:cmd] = "rspec -t ~slow"
|
101
|
+
end
|
87
102
|
|
88
|
-
it
|
89
|
-
expect(Guard::RSpec::Command).to receive(:new).
|
103
|
+
it "builds command with custom cmd" do
|
104
|
+
expect(Guard::RSpec::Command).to receive(:new).
|
105
|
+
with(kind_of(Array), hash_including(cmd: "rspec -t ~slow"))
|
90
106
|
runner.run_all
|
91
107
|
end
|
92
108
|
end
|
93
109
|
|
94
|
-
context
|
95
|
-
before
|
110
|
+
context "with no cmd" do
|
111
|
+
before do
|
96
112
|
options[:cmd] = nil
|
97
113
|
allow(Guard::RSpec::Command).to receive(:new)
|
98
114
|
allow(Guard::UI).to receive(:error).with(an_instance_of(String))
|
99
115
|
allow(notifier).to receive(:notify_failure)
|
100
116
|
runner.run_all
|
101
|
-
|
117
|
+
end
|
102
118
|
|
103
|
-
it
|
119
|
+
it "does not build" do
|
104
120
|
expect(Guard::RSpec::Command).to_not have_received(:new)
|
105
121
|
end
|
106
122
|
|
107
|
-
it
|
123
|
+
it "issues a warning to the user" do
|
108
124
|
expect(Guard::UI).to have_received(:error).with(an_instance_of(String))
|
109
125
|
end
|
110
126
|
|
111
|
-
it
|
127
|
+
it "notifies the notifer of failure" do
|
112
128
|
expect(notifier).to have_received(:notify_failure)
|
113
129
|
end
|
114
130
|
end
|
115
131
|
end
|
116
132
|
|
117
|
-
describe
|
118
|
-
let(:paths) { %w
|
119
|
-
before
|
120
|
-
|
133
|
+
describe "#run" do
|
134
|
+
let(:paths) { %w(spec_path1 spec_path2) }
|
135
|
+
before do
|
136
|
+
tmp_file = "tmp/rspec_guard_result"
|
137
|
+
allow(File).to receive(:readlines).with(tmp_file) { ["Summary\n"] }
|
121
138
|
allow(inspector).to receive(:paths) { paths }
|
122
139
|
allow(inspector).to receive(:clear_paths) { true }
|
123
140
|
allow(inspector).to receive(:failed)
|
124
|
-
|
141
|
+
end
|
125
142
|
|
126
|
-
it
|
127
|
-
expect(Guard::UI).to receive(:info).
|
143
|
+
it "prints running message" do
|
144
|
+
expect(Guard::UI).to receive(:info).
|
145
|
+
with("Running: spec_path1 spec_path2", reset: true)
|
128
146
|
runner.run(paths)
|
129
147
|
end
|
130
148
|
|
131
|
-
context
|
149
|
+
context "when no paths are given" do
|
132
150
|
subject { runner.run([]) }
|
133
151
|
|
134
152
|
before do
|
135
153
|
allow(inspector).to receive(:paths) { [] }
|
136
154
|
end
|
137
155
|
|
138
|
-
include_examples
|
156
|
+
include_examples "abort"
|
139
157
|
end
|
140
158
|
|
141
|
-
it
|
142
|
-
expect(Guard::RSpec::Command).to receive(:new).
|
159
|
+
it "builds commands with spec paths" do
|
160
|
+
expect(Guard::RSpec::Command).to receive(:new).
|
161
|
+
with(%w(spec_path1 spec_path2), kind_of(Hash))
|
143
162
|
runner.run(paths)
|
144
163
|
end
|
145
164
|
|
146
|
-
context
|
147
|
-
let(:options) { { cmd:
|
165
|
+
context "with all_after_pass option" do
|
166
|
+
let(:options) { { cmd: "rspec", all_after_pass: true } }
|
148
167
|
|
149
|
-
it
|
168
|
+
it "re-runs all if run is success" do
|
150
169
|
expect(runner).to receive(:run_all)
|
151
170
|
runner.run(paths)
|
152
171
|
end
|
153
172
|
end
|
154
173
|
|
155
|
-
context
|
156
|
-
let(:options) { { cmd:
|
174
|
+
context "with launchy option" do
|
175
|
+
let(:options) { { cmd: "rspec", launchy: "launchy_path" } }
|
157
176
|
|
158
|
-
before
|
159
|
-
allow(Pathname).to receive(:new).
|
160
|
-
|
177
|
+
before do
|
178
|
+
allow(Pathname).to receive(:new).
|
179
|
+
with("launchy_path") { double(exist?: true) }
|
180
|
+
end
|
161
181
|
|
162
|
-
it
|
163
|
-
expect(Launchy).to receive(:open).with(
|
182
|
+
it "opens Launchy" do
|
183
|
+
expect(Launchy).to receive(:open).with("launchy_path")
|
164
184
|
runner.run(paths)
|
165
185
|
end
|
166
186
|
end
|
167
187
|
|
168
|
-
it
|
188
|
+
it "notifies inspector about failed paths" do
|
169
189
|
expect(inspector).to receive(:failed).with([])
|
170
190
|
runner.run(paths)
|
171
191
|
end
|
172
192
|
|
173
|
-
context
|
174
|
-
before
|
175
|
-
allow(File).to receive(:readlines).
|
176
|
-
|
193
|
+
context "with failed paths" do
|
194
|
+
before do
|
195
|
+
allow(File).to receive(:readlines).
|
196
|
+
with("tmp/rspec_guard_result") do
|
197
|
+
[
|
198
|
+
"Summary\n",
|
199
|
+
"./failed_spec.rb:123\n",
|
200
|
+
"./other/failed_spec.rb:77\n"
|
201
|
+
]
|
202
|
+
end
|
203
|
+
end
|
204
|
+
it "notifies inspector about failed paths" do
|
205
|
+
expect(inspector).to receive(:failed).
|
206
|
+
with(["./failed_spec.rb:123", "./other/failed_spec.rb:77"])
|
177
207
|
|
178
|
-
it 'notifies inspector about failed paths' do
|
179
|
-
expect(inspector).to receive(:failed).with(%w[./failed_spec.rb:123 ./other/failed_spec.rb:77])
|
180
208
|
runner.run(paths)
|
181
209
|
end
|
182
210
|
end
|
183
211
|
|
184
|
-
it
|
185
|
-
expect(notifier).to receive(:notify).with(
|
212
|
+
it "notifies success" do
|
213
|
+
expect(notifier).to receive(:notify).with("Summary")
|
186
214
|
runner.run(paths)
|
187
215
|
end
|
188
216
|
|
189
|
-
it
|
217
|
+
it "notifies failure" do
|
190
218
|
allow(Kernel).to receive(:system) { nil }
|
191
219
|
expect(notifier).to receive(:notify_failure)
|
192
220
|
runner.run(paths)
|
193
221
|
end
|
194
222
|
end
|
223
|
+
|
224
|
+
# TODO: remove / cleanup
|
225
|
+
describe "_tmp_file" do
|
226
|
+
subject { described_class.new.send(:_tmp_file, chdir) }
|
227
|
+
|
228
|
+
context "with no chdir option" do
|
229
|
+
let(:chdir) { nil }
|
230
|
+
it { is_expected.to eq("tmp/rspec_guard_result") }
|
231
|
+
end
|
232
|
+
|
233
|
+
context "chdir option" do
|
234
|
+
let(:chdir) { "moduleA" }
|
235
|
+
it { is_expected.to eq("moduleA/tmp/rspec_guard_result") }
|
236
|
+
end
|
237
|
+
end
|
195
238
|
end
|