teaspoon 0.8.0 → 0.9.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.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/MIT.LICENSE +1 -1
  3. data/README.md +46 -377
  4. data/app/assets/javascripts/teaspoon-jasmine.js +200 -194
  5. data/app/assets/javascripts/teaspoon-mocha.js +183 -185
  6. data/app/assets/javascripts/teaspoon-qunit.js +201 -193
  7. data/app/assets/javascripts/teaspoon-teaspoon.js +10 -10
  8. data/app/assets/javascripts/teaspoon/base/fixture.coffee +0 -1
  9. data/app/assets/javascripts/teaspoon/base/hook.coffee +7 -6
  10. data/app/assets/javascripts/teaspoon/qunit.coffee +10 -0
  11. data/app/controllers/teaspoon/suite_controller.rb +3 -4
  12. data/app/views/teaspoon/suite/_boot.html.erb +1 -1
  13. data/app/views/teaspoon/suite/_boot_require_js.html.erb +1 -0
  14. data/bin/teaspoon +1 -1
  15. data/config/routes.rb +4 -14
  16. data/lib/generators/teaspoon/install/install_generator.rb +22 -11
  17. data/lib/generators/teaspoon/install/templates/jasmine/{env_comments.rb → env_comments.rb.tt} +10 -5
  18. data/lib/generators/teaspoon/install/templates/jasmine/spec_helper.coffee +5 -5
  19. data/lib/generators/teaspoon/install/templates/jasmine/spec_helper.js +5 -5
  20. data/lib/generators/teaspoon/install/templates/mocha/{env_comments.rb → env_comments.rb.tt} +10 -5
  21. data/lib/generators/teaspoon/install/templates/mocha/spec_helper.coffee +6 -5
  22. data/lib/generators/teaspoon/install/templates/mocha/spec_helper.js +6 -5
  23. data/lib/generators/teaspoon/install/templates/qunit/{env_comments.rb → env_comments.rb.tt} +10 -5
  24. data/lib/generators/teaspoon/install/templates/qunit/test_helper.coffee +5 -5
  25. data/lib/generators/teaspoon/install/templates/qunit/test_helper.js +5 -5
  26. data/lib/tasks/teaspoon.rake +1 -1
  27. data/lib/teaspoon/command_line.rb +37 -40
  28. data/lib/teaspoon/configuration.rb +27 -30
  29. data/lib/teaspoon/configuration.rb.orig +187 -0
  30. data/lib/teaspoon/console.rb +31 -17
  31. data/lib/teaspoon/coverage.rb +2 -3
  32. data/lib/teaspoon/deprecated.rb +13 -8
  33. data/lib/teaspoon/drivers/base.rb +2 -2
  34. data/lib/teaspoon/drivers/capybara_webkit_driver.rb +33 -0
  35. data/lib/teaspoon/drivers/phantomjs/runner.js +2 -2
  36. data/lib/teaspoon/drivers/phantomjs_driver.rb +13 -4
  37. data/lib/teaspoon/drivers/selenium_driver.rb +3 -5
  38. data/lib/teaspoon/engine.rb +33 -5
  39. data/lib/teaspoon/environment.rb +2 -4
  40. data/lib/teaspoon/exceptions.rb +8 -5
  41. data/lib/teaspoon/formatters/base.rb +39 -27
  42. data/lib/teaspoon/formatters/clean_formatter.rb +0 -1
  43. data/lib/teaspoon/formatters/description.rb +36 -0
  44. data/lib/teaspoon/formatters/documentation_formatter.rb +2 -2
  45. data/lib/teaspoon/formatters/json_formatter.rb +1 -2
  46. data/lib/teaspoon/formatters/junit_formatter.rb +20 -20
  47. data/lib/teaspoon/formatters/modules/report_module.rb +4 -4
  48. data/lib/teaspoon/formatters/pride_formatter.rb +0 -1
  49. data/lib/teaspoon/formatters/rspec_html_formatter.rb +463 -0
  50. data/lib/teaspoon/formatters/snowday_formatter.rb +0 -1
  51. data/lib/teaspoon/formatters/swayze_or_oprah_formatter.rb +5 -4
  52. data/lib/teaspoon/formatters/tap_formatter.rb +2 -3
  53. data/lib/teaspoon/formatters/tap_y_formatter.rb +20 -21
  54. data/lib/teaspoon/formatters/teamcity_formatter.rb +4 -5
  55. data/lib/teaspoon/instrumentation.rb +7 -7
  56. data/lib/teaspoon/result.rb +1 -3
  57. data/lib/teaspoon/runner.rb +1 -2
  58. data/lib/teaspoon/server.rb +2 -1
  59. data/lib/teaspoon/suite.rb +20 -17
  60. data/lib/teaspoon/utility.rb +1 -3
  61. data/lib/teaspoon/version.rb +1 -1
  62. data/spec/dummy/config/application.rb +14 -18
  63. data/spec/dummy/config/boot.rb +2 -6
  64. data/spec/dummy/config/environment.rb +3 -3
  65. data/spec/dummy/config/environments/development.rb +27 -13
  66. data/spec/dummy/config/environments/production.rb +79 -0
  67. data/spec/dummy/config/environments/test.rb +26 -13
  68. data/spec/dummy/config/routes.rb +1 -1
  69. data/spec/dummy/config/secrets.yml +22 -0
  70. data/spec/features/console_reporter_spec.rb +3 -8
  71. data/spec/features/hooks_spec.rb +17 -4
  72. data/spec/features/html_reporter_spec.rb +12 -1
  73. data/spec/features/install_generator_spec.rb +2 -3
  74. data/spec/features/instrumentation_spec.rb +11 -11
  75. data/spec/javascripts/teaspoon/base/teaspoon_spec.coffee +14 -1
  76. data/spec/spec_helper.rb +7 -4
  77. data/spec/teaspoon/command_line_spec.rb +19 -28
  78. data/spec/teaspoon/configuration_spec.rb +22 -14
  79. data/spec/teaspoon/console_spec.rb +79 -63
  80. data/spec/teaspoon/coverage_spec.rb +23 -23
  81. data/spec/teaspoon/drivers/capybara_webkit_driver_spec.rb +39 -0
  82. data/spec/teaspoon/drivers/phantomjs_driver_spec.rb +10 -5
  83. data/spec/teaspoon/drivers/selenium_driver_spec.rb +10 -10
  84. data/spec/teaspoon/environment_spec.rb +28 -20
  85. data/spec/teaspoon/exceptions_spec.rb +4 -4
  86. data/spec/teaspoon/exporter_spec.rb +28 -28
  87. data/spec/teaspoon/formatters/base_spec.rb +29 -29
  88. data/spec/teaspoon/formatters/clean_formatter_spec.rb +1 -1
  89. data/spec/teaspoon/formatters/documentation_formatter_spec.rb +1 -1
  90. data/spec/teaspoon/formatters/dot_formatter_spec.rb +1 -1
  91. data/spec/teaspoon/formatters/json_formatter_spec.rb +7 -7
  92. data/spec/teaspoon/formatters/junit_formatter_spec.rb +10 -10
  93. data/spec/teaspoon/formatters/pride_formatter_spec.rb +1 -1
  94. data/spec/teaspoon/formatters/rspec_html_formatter_spec.rb +107 -0
  95. data/spec/teaspoon/formatters/snowday_formatter_spec.rb +1 -1
  96. data/spec/teaspoon/formatters/tap_formatter_spec.rb +1 -1
  97. data/spec/teaspoon/formatters/tap_y_formatter_spec.rb +1 -1
  98. data/spec/teaspoon/formatters/teamcity_formatter_spec.rb +27 -27
  99. data/spec/teaspoon/instrumentation_spec.rb +35 -29
  100. data/spec/teaspoon/result_spec.rb +40 -36
  101. data/spec/teaspoon/runner_spec.rb +23 -20
  102. data/spec/teaspoon/server_spec.rb +19 -16
  103. data/spec/teaspoon/suite_spec.rb +23 -9
  104. data/spec/teaspoon_env.rb +7 -12
  105. data/test/javascripts/teaspoon/qunit/models_test.coffee +6 -2
  106. data/vendor/assets/javascripts/support/chai-1.10.0.js +4800 -0
  107. data/vendor/assets/javascripts/support/chai-jq-0.0.7.js +524 -0
  108. data/vendor/assets/javascripts/support/chai.js +4435 -4349
  109. metadata +57 -54
  110. data/app/assets/javascripts/teaspoon-angular.js +0 -1299
  111. data/app/assets/javascripts/teaspoon/angular.coffee +0 -55
  112. data/app/assets/javascripts/teaspoon/angular/reporters/console.coffee +0 -11
  113. data/app/assets/javascripts/teaspoon/angular/reporters/html.coffee +0 -21
  114. data/spec/javascripts/angular_helper.coffee +0 -5
  115. data/spec/javascripts/teaspoon/angular/models_aspec.coffee +0 -95
  116. data/spec/javascripts/teaspoon/angular/reporters/html_aspec.coffee +0 -9
  117. data/vendor/assets/javascripts/angular/1.0.5.js +0 -26195
  118. data/vendor/assets/javascripts/angular/MIT-LICENSE +0 -22
@@ -4,29 +4,33 @@ require "teaspoon/result"
4
4
  describe Teaspoon::Result do
5
5
 
6
6
  subject { Teaspoon::Result.build_from_json(json) }
7
- let(:suite_name) { 'My Suite' }
8
- let(:json) {{
9
- "type" => "spec",
10
- "suite" => "_suite_name_",
11
- "label" => "_spec_name_",
12
- "status" => "failed",
13
- "skipped" => false,
14
- "link" => "?grep=_spec_description_",
15
- "message" => "_message_",
16
- "trace" => "_trace_",
17
- "coverage" => "_coverage_",
18
- }}
7
+ let(:suite_name) { "My Suite" }
8
+ let(:json) do
9
+ {
10
+ "type" => "spec",
11
+ "suite" => "_suite_name_",
12
+ "label" => "_spec_name_",
13
+ "status" => "failed",
14
+ "skipped" => false,
15
+ "link" => "?grep=_spec_description_",
16
+ "message" => "_message_",
17
+ "trace" => "_trace_",
18
+ "coverage" => "_coverage_",
19
+ }
20
+ end
19
21
 
20
22
  describe ".build_from_json" do
21
23
 
22
24
  describe "with a results object" do
23
25
 
24
- let(:json) {{
25
- "elapsed" => 0.01,
26
- "failures" => 10,
27
- "pending" => 1,
28
- "total" => 25
29
- }}
26
+ let(:json) do
27
+ {
28
+ "elapsed" => 0.01,
29
+ "failures" => 10,
30
+ "pending" => 1,
31
+ "total" => 25
32
+ }
33
+ end
30
34
 
31
35
  it "assigns from the JSON hash" do
32
36
  expect(subject.elapsed).to eq(0.01)
@@ -38,16 +42,16 @@ describe Teaspoon::Result do
38
42
  describe "with a spec" do
39
43
 
40
44
  it "assigns from the JSON hash" do
41
- expect(subject.type).to eq('spec')
42
- expect(subject.suite).to eq('_suite_name_')
43
- expect(subject.label).to eq('_spec_name_')
44
- expect(subject.description).to eq('_suite_name_ _spec_name_')
45
- expect(subject.status).to eq('failed')
46
- expect(subject.skipped).to be_false
47
- expect(subject.link).to eq('?grep=_spec_description_')
48
- expect(subject.message).to eq('_message_')
49
- expect(subject.trace).to eq('_trace_')
50
- expect(subject.coverage).to eq('_coverage_')
45
+ expect(subject.type).to eq("spec")
46
+ expect(subject.suite).to eq("_suite_name_")
47
+ expect(subject.label).to eq("_spec_name_")
48
+ expect(subject.description).to eq("_suite_name_ _spec_name_")
49
+ expect(subject.status).to eq("failed")
50
+ expect(subject.skipped).to be_falsey
51
+ expect(subject.link).to eq("?grep=_spec_description_")
52
+ expect(subject.message).to eq("_message_")
53
+ expect(subject.trace).to eq("_trace_")
54
+ expect(subject.coverage).to eq("_coverage_")
51
55
  end
52
56
 
53
57
  end
@@ -58,13 +62,13 @@ describe Teaspoon::Result do
58
62
 
59
63
  it "returns a boolean based on status" do
60
64
  subject.status = "foo"
61
- expect(subject.failing?).to be_true
65
+ expect(subject.failing?).to be_truthy
62
66
  subject.status = "bar"
63
- expect(subject.failing?).to be_true
67
+ expect(subject.failing?).to be_truthy
64
68
  subject.status = "passed"
65
- expect(subject.failing?).to be_false
69
+ expect(subject.failing?).to be_falsey
66
70
  subject.status = "pending"
67
- expect(subject.failing?).to be_false
71
+ expect(subject.failing?).to be_falsey
68
72
  end
69
73
 
70
74
  end
@@ -73,9 +77,9 @@ describe Teaspoon::Result do
73
77
 
74
78
  it "returns a boolean based on status" do
75
79
  subject.status = "passed"
76
- expect(subject.passing?).to be_true
80
+ expect(subject.passing?).to be_truthy
77
81
  subject.status = "foo"
78
- expect(subject.passing?).to be_false
82
+ expect(subject.passing?).to be_falsey
79
83
  end
80
84
 
81
85
  end
@@ -84,9 +88,9 @@ describe Teaspoon::Result do
84
88
 
85
89
  it "returns a boolean based on status" do
86
90
  subject.status = "pending"
87
- expect(subject.pending?).to be_true
91
+ expect(subject.pending?).to be_truthy
88
92
  subject.status = "foo"
89
- expect(subject.pending?).to be_false
93
+ expect(subject.pending?).to be_falsey
90
94
  end
91
95
 
92
96
  end
@@ -6,7 +6,7 @@ require "teaspoon/coverage"
6
6
  describe Teaspoon::Runner do
7
7
 
8
8
  before do
9
- Teaspoon.configuration.stub(:formatters).and_return([])
9
+ allow(Teaspoon.configuration).to receive(:formatters).and_return([])
10
10
  end
11
11
 
12
12
  describe "#initialize" do
@@ -18,7 +18,7 @@ describe Teaspoon::Runner do
18
18
  end
19
19
 
20
20
  it "instantiates formatters based on configuration" do
21
- Teaspoon.configuration.stub(:formatters).and_return(["dot", "xml"])
21
+ allow(Teaspoon.configuration).to receive(:formatters).and_return(["dot", "xml"])
22
22
  Teaspoon::Formatters::XmlFormatter = Class.new do
23
23
  def initialize(_suite_name = :default, _output_file = nil) end
24
24
  end
@@ -27,7 +27,7 @@ describe Teaspoon::Runner do
27
27
  end
28
28
 
29
29
  it "raises a Teaspoon::UnknownFormatter exception when a formatter isn't found" do
30
- Teaspoon.configuration.stub(:formatters).and_return(["bar"])
30
+ allow(Teaspoon.configuration).to receive(:formatters).and_return(["bar"])
31
31
  expect { Teaspoon::Runner.new(:foo) }.to raise_error Teaspoon::UnknownFormatter, "Unknown formatter: \"bar\""
32
32
  end
33
33
 
@@ -43,25 +43,25 @@ describe Teaspoon::Runner do
43
43
  end
44
44
 
45
45
  it "notifies formatters when it understands the log" do
46
- formatter.should_receive(:foo)
47
- formatter.should_not_receive(:bar)
46
+ expect(formatter).to receive(:foo)
47
+ expect(formatter).to_not receive(:bar)
48
48
  subject.process('{"_teaspoon":true,"type":"foo"}')
49
49
  subject.process('{"_teaspoon":false,"type":"bar"}')
50
50
  end
51
51
 
52
52
  it "notifies formatters of console output when it doesn't understand the log" do
53
- formatter.should_receive(:console).with("_line_")
54
- subject.should_receive(:result_from_line).and_return(false)
53
+ expect(formatter).to receive(:console).with("_line_")
54
+ expect(subject).to receive(:result_from_line).and_return(false)
55
55
  subject.process("_line_")
56
56
  end
57
57
 
58
58
  it "handles bad json" do
59
- formatter.should_receive(:console).with("{bad: true}")
59
+ expect(formatter).to receive(:console).with("{bad: true}")
60
60
  subject.process("{bad: true}")
61
61
  end
62
62
 
63
63
  it "handles json when it's not intended for it" do
64
- formatter.should_receive(:console).with('{"good": true}')
64
+ expect(formatter).to receive(:console).with('{"good": true}')
65
65
  subject.process('{"good": true}')
66
66
  end
67
67
 
@@ -77,8 +77,11 @@ describe Teaspoon::Runner do
77
77
  describe "with an exception" do
78
78
 
79
79
  it "notifies itself, and raises Teaspoon::RunnerException" do
80
- subject.should_receive(:on_exception).and_call_original
81
- expect { subject.process('{"_teaspoon":true,"type":"exception","message":"_message_"}') }.to raise_error Teaspoon::RunnerException, "_message_"
80
+ expect(subject).to receive(:on_exception).and_call_original
81
+ expect { subject.process('{"_teaspoon":true,"type":"exception","message":"_message_"}') }.to raise_error(
82
+ Teaspoon::RunnerException,
83
+ "_message_"
84
+ )
82
85
  end
83
86
 
84
87
  end
@@ -86,22 +89,22 @@ describe Teaspoon::Runner do
86
89
  describe "with a result" do
87
90
 
88
91
  before do
89
- Teaspoon::Coverage.stub(:new).and_return(coverage)
92
+ allow(Teaspoon::Coverage).to receive(:new).and_return(coverage)
90
93
  end
91
94
 
92
95
  it "notifies itself" do
93
- subject.should_receive(:on_result)
96
+ expect(subject).to receive(:on_result)
94
97
  subject.process('{"_teaspoon":true,"type":"result"}')
95
98
  end
96
99
 
97
100
  it "resolves coverage" do
98
- Teaspoon.configuration.should_receive(:use_coverage).twice.and_return("_coverage_config_")
99
- Teaspoon::Coverage.should_receive(:new).with(:default, "_coverage_config_", "_coverage_").and_return(coverage)
100
- coverage.should_receive(:generate_reports).and_yield("_generated_reports_")
101
- coverage.should_receive(:check_thresholds).and_yield("_threshold_failures_")
102
- subject.should_receive(:notify_formatters).once.with("coverage", "_generated_reports_")
103
- subject.should_receive(:notify_formatters).once.with("threshold_failure", "_threshold_failures_")
104
- subject.should_receive(:notify_formatters).exactly(2).times.and_call_original
101
+ expect(Teaspoon.configuration).to receive(:use_coverage).twice.and_return("_config_")
102
+ expect(Teaspoon::Coverage).to receive(:new).with(:default, "_config_", "_coverage_").and_return(coverage)
103
+ expect(coverage).to receive(:generate_reports).and_yield("_generated_reports_")
104
+ expect(coverage).to receive(:check_thresholds).and_yield("_threshold_failures_")
105
+ expect(subject).to receive(:notify_formatters).once.with("coverage", "_generated_reports_")
106
+ expect(subject).to receive(:notify_formatters).once.with("threshold_failure", "_threshold_failures_")
107
+ expect(subject).to receive(:notify_formatters).exactly(2).times.and_call_original
105
108
  subject.process('{"_teaspoon":true,"type":"result","coverage":"_coverage_"}')
106
109
  expect(subject.failure_count).to eq(1)
107
110
  end
@@ -11,31 +11,31 @@ describe Teaspoon::Server do
11
11
  let(:server) { double(start: nil) }
12
12
 
13
13
  before do
14
- Thread.stub(:new) { |&b| @block = b; "_thread_" }
15
- subject.stub(wait_until_started: nil)
14
+ allow(Thread).to receive(:new) { |&b| @block = b; "_thread_" }
15
+ allow(subject).to receive(:wait_until_started).and_return(nil)
16
16
  end
17
17
 
18
18
  it "spawns a thread" do
19
- Thread.should_receive(:new)
19
+ expect(Thread).to receive(:new)
20
20
  subject.start
21
21
  end
22
22
 
23
23
  it "starts a rack server" do
24
- Rack::Server.should_receive(:new).and_return(server)
25
- server.should_receive(:start)
24
+ expect(Rack::Server).to receive(:new).and_return(server)
25
+ expect(server).to receive(:start)
26
26
 
27
27
  subject.start
28
28
  @block.call
29
29
  end
30
30
 
31
31
  it "waits until the server is started" do
32
- Thread.should_receive(:new)
33
- subject.should_receive(:wait_until_started).with("_thread_")
32
+ expect(Thread).to receive(:new)
33
+ expect(subject).to receive(:wait_until_started).with("_thread_")
34
34
  subject.start
35
35
  end
36
36
 
37
37
  it "rescues errors" do
38
- Thread.should_receive(:new).and_raise("OMG!")
38
+ expect(Thread).to receive(:new).and_raise("OMG!")
39
39
  expect { subject.start }.to raise_error("Cannot start server: OMG!")
40
40
  end
41
41
 
@@ -48,16 +48,19 @@ describe Teaspoon::Server do
48
48
  Logger: Rails.logger,
49
49
  server: Teaspoon.configuration.server
50
50
  }
51
- Rack::Server.should_receive(:new).with(expected_opts).and_return(server)
51
+ expect(Rack::Server).to receive(:new).with(expected_opts).and_return(server)
52
52
 
53
53
  subject.start
54
54
  @block.call
55
55
  end
56
56
 
57
57
  it "raises a ServerException if the timeout fails" do
58
- subject.should_receive(:wait_until_started).and_call_original
59
- Timeout.should_receive(:timeout).with(Teaspoon.configuration.server_timeout.to_i).and_raise(Timeout::Error)
60
- expect{ subject.start }.to raise_error Teaspoon::ServerException
58
+ expect(subject).to receive(:wait_until_started).and_call_original
59
+ expect(Timeout).to receive(:timeout).with(Teaspoon.configuration.server_timeout.to_i).and_raise(Timeout::Error)
60
+ expect { subject.start }.to raise_error(
61
+ Teaspoon::ServerException,
62
+ "Server failed to start. You may need to increase the timeout configuration."
63
+ )
61
64
  end
62
65
 
63
66
  end
@@ -68,8 +71,8 @@ describe Teaspoon::Server do
68
71
 
69
72
  it "checks a local port to see if a server is running" do
70
73
  subject.port = 31337
71
- TCPSocket.should_receive(:new).with("127.0.0.1", 31337).and_return(socket)
72
- socket.should_receive(:close)
74
+ expect(TCPSocket).to receive(:new).with("127.0.0.1", 31337).and_return(socket)
75
+ expect(socket).to receive(:close)
73
76
  subject.responsive?
74
77
  end
75
78
 
@@ -87,8 +90,8 @@ describe Teaspoon::Server do
87
90
  describe "integration" do
88
91
 
89
92
  before do
90
- Teaspoon.configuration.stub(:suite_configs).and_return("foo" => {block: proc{}})
91
- Teaspoon.configuration.stub(:suppress_log).and_return(true)
93
+ allow(Teaspoon.configuration).to receive(:suite_configs).and_return("foo" => { block: proc {} })
94
+ allow(Teaspoon.configuration).to receive(:suppress_log).and_return(true)
92
95
  end
93
96
 
94
97
  it "really starts a server" do
@@ -3,14 +3,15 @@ require "spec_helper"
3
3
  describe Teaspoon::Suite do
4
4
 
5
5
  before do
6
- Teaspoon.configuration.stub(:suite_configs).and_return("default" => {block: proc{}})
6
+ allow(Teaspoon.configuration).to receive(:suite_configs).and_return("default" => { block: proc {} })
7
7
  end
8
8
 
9
9
  describe ".all" do
10
10
 
11
11
  before do
12
12
  Teaspoon::Suite.instance_variable_set(:@all, nil)
13
- Teaspoon.configuration.stub(:suite_configs).and_return("default" => {block: proc{}}, "foo" => {block: proc{}})
13
+ suites = { "default" => { block: proc {} }, "foo" => { block: proc {} } }
14
+ allow(Teaspoon.configuration).to receive(:suite_configs).and_return(suites)
14
15
  end
15
16
 
16
17
  it "returns all the suites" do
@@ -35,7 +36,11 @@ describe Teaspoon::Suite do
35
36
  result = Teaspoon::Suite.resolve_spec_for("base")
36
37
  expect(result[:suite]).to eq("default")
37
38
  dirs = ["base/fixture_spec.", "base/runner_spec.", "base/teaspoon_spec"]
38
- expect(dirs.all? { |path| result[:path].grep(/#{path}/)[0] }).to be_true
39
+ expect(dirs.all? { |path| result[:path].grep(/#{path}/)[0] }).to be_truthy
40
+ end
41
+
42
+ it "returns false if the spec wasn't found" do
43
+ expect(Teaspoon::Suite.resolve_spec_for("foo")).to be_falsey
39
44
  end
40
45
 
41
46
  end
@@ -48,7 +53,8 @@ describe Teaspoon::Suite do
48
53
  end
49
54
 
50
55
  it "accepts a suite in the options" do
51
- Teaspoon.configuration.should_receive(:suite_configs).and_return("test" => {block: proc{ |s| s.helper = "helper_file" }})
56
+ suite = { "test" => { block: proc { |s| s.helper = "helper_file" } } }
57
+ expect(Teaspoon.configuration).to receive(:suite_configs).and_return(suite)
52
58
  subject = Teaspoon::Suite.new(suite: :test)
53
59
  expect(subject.name).to eql("test")
54
60
  expect(subject.config.helper).to eq("helper_file")
@@ -60,12 +66,12 @@ describe Teaspoon::Suite do
60
66
 
61
67
  it "returns an array of hashes with the filename and the asset name" do
62
68
  file = Teaspoon::Engine.root.join("spec/javascripts/teaspoon/base/reporters/console_spec.js").to_s
63
- subject.should_receive(:glob).and_return([file])
69
+ expect(subject).to receive(:glob).and_return([file])
64
70
  expect(subject.spec_files[0]).to eql(path: file, name: "teaspoon/base/reporters/console_spec.js")
65
71
  end
66
72
 
67
73
  it "raises an exception if the file isn't servable (in an asset path)" do
68
- subject.should_receive(:glob).and_return(["/foo"])
74
+ expect(subject).to receive(:glob).and_return(["/foo"])
69
75
  expect { subject.spec_files[0] }.to raise_error Teaspoon::AssetNotServable
70
76
  end
71
77
 
@@ -79,13 +85,14 @@ describe Teaspoon::Suite do
79
85
  expect(result).to include("teaspoon/base/reporters/console_spec.js?body=1")
80
86
  end
81
87
 
82
- it "returns just a file if one was requests" do
88
+ it "returns just a file if one was requested" do
83
89
  subject.instance_variable_set(:@options, file: "spec/javascripts/foo.js")
84
90
  result = subject.spec_assets(false)
85
91
  expect(result).to eql(["foo.js"])
86
92
  end
87
93
 
88
94
  it "returns the asset tree (all dependencies resolved) if we want coverage" do
95
+ allow(subject).to receive(:no_coverage).and_return([%r{support/}, "spec_helper.coffee"])
89
96
  subject.instance_variable_set(:@options, coverage: true)
90
97
  result = subject.spec_assets(true)
91
98
  expect(result).to include("support/json2.js?body=1")
@@ -93,6 +100,12 @@ describe Teaspoon::Suite do
93
100
  expect(result).to include("drivers/phantomjs/runner.js?body=1&instrument=1")
94
101
  end
95
102
 
103
+ it "returns only the top level assets in the asset tree if config/expand_assets is set to false" do
104
+ allow(subject.config).to receive(:expand_assets).and_return(false)
105
+ result = subject.spec_assets(true)
106
+ expect(result.any? { |file| file =~ /body=1/ }).to eq(false)
107
+ end
108
+
96
109
  end
97
110
 
98
111
  describe "#include_spec?" do
@@ -112,11 +125,12 @@ describe Teaspoon::Suite do
112
125
  end
113
126
 
114
127
  it "returns a list of specs when the file name looks like it could be a match" do
115
- expect( subject.include_spec_for?('fixture_spec').any? { |file| file.include?('fixture_spec.coffee') }).to be_true
128
+ files = subject.include_spec_for?("fixture_spec")
129
+ expect(files.any? { |file| file.include?("fixture_spec.coffee") }).to be_truthy
116
130
  end
117
131
 
118
132
  it "returns false if a matching spec isn't found" do
119
- expect(subject.include_spec_for?('_not_a_match_')).to eq(false)
133
+ expect(subject.include_spec_for?("_not_a_match_")).to eq(false)
120
134
  end
121
135
 
122
136
  end
data/spec/teaspoon_env.rb CHANGED
@@ -6,10 +6,11 @@ end
6
6
 
7
7
  Teaspoon.configure do |config|
8
8
  config.root = Teaspoon::Engine.root
9
- config.asset_paths << Teaspoon::Engine.root.join('lib/teaspoon')
9
+ config.asset_paths << Teaspoon::Engine.root.join("lib/teaspoon")
10
10
 
11
11
  config.suite do |suite|
12
- suite.matcher = "{spec/javascripts,spec/dummy/app/assets/javascripts/specs}/**/*_spec.{js,js.coffee,coffee,js.coffee.erb}"
12
+ roots = "spec/javascripts,spec/dummy/app/assets/javascripts/specs"
13
+ suite.matcher = "{#{roots}}/**/*_spec.{js,js.coffee,coffee,js.coffee.erb}"
13
14
  suite.javascripts = ["jasmine/1.3.1", "teaspoon/jasmine"]
14
15
  end
15
16
 
@@ -31,14 +32,8 @@ Teaspoon.configure do |config|
31
32
  suite.helper = "qunit_helper"
32
33
  end
33
34
 
34
- config.suite :angular do |suite|
35
- suite.matcher = "spec/javascripts/**/*_aspec.{js,js.coffee,coffee}"
36
- suite.javascripts = ["angular/1.0.5", "teaspoon/angular"]
37
- suite.helper = "angular_helper"
38
- end
39
-
40
- #config.suite :integration do |suite|
41
- # suite.matcher = "spec/dummy/app/assets/javascripts/integration/*_spec.{js,js.coffee,coffee}"
42
- # suite.helper = nil
43
- #end
35
+ # config.suite :integration do |suite|
36
+ # suite.matcher = "spec/dummy/app/assets/javascripts/integration/*_spec.{js,js.coffee,coffee}"
37
+ # suite.helper = nil
38
+ # end
44
39
  end
@@ -3,6 +3,8 @@ module "QUnit Teaspoon.Spec",
3
3
  @mockAssertions = [
4
4
  {message: "_qunit_message1_", source: "_source1_"}
5
5
  {message: "_qunit_message2_", source: "_source2_"}
6
+ {source: "_source3_", expected: 1, actual: 2}
7
+ {source: "_source4_"}
6
8
  ]
7
9
  @mockSpec =
8
10
  module: "_full qunit name_"
@@ -23,11 +25,13 @@ test "constructor", 7, ->
23
25
  ok(spec.viewId == 420, "sets viewId")
24
26
  ok(spec.pending == false, "sets pending to false") # no pending support
25
27
 
26
- test "#errors", 3, ->
28
+ test "#errors", 5, ->
27
29
  errors = new Teaspoon.Spec(@mockSpec).errors()
28
- ok(errors.length == 2, "returns the correct length array")
30
+ ok(errors.length == 4, "returns the correct length array")
29
31
  equal(errors[0].message, "_qunit_message1_", "the first item in the returned array is correct")
30
32
  equal(errors[0].stack, "_source1_", "the first item in the returned array is correct")
33
+ equal(errors[2].message, "Expected 2 to equal 1", "a nice fallback message is provided if QUnit does not provide one")
34
+ equal(errors[3].message, "failed", "some fallback message is provided if QUnit does not provide any information")
31
35
 
32
36
  test "#getParents", 3, ->
33
37
  spec = new Teaspoon.Spec(@mockSpec)