teaspoon 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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)