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
@@ -2,17 +2,22 @@ require "teaspoon/environment"
2
2
 
3
3
  module Teaspoon
4
4
  class Console
5
-
6
5
  def initialize(options = {})
7
- @options = options
6
+ @default_options = options
8
7
  @suites = {}
9
- Teaspoon::Environment.load(@options)
8
+ Teaspoon::Environment.load(options)
10
9
 
11
10
  @server = start_server
12
11
  rescue Teaspoon::ServerException => e
13
12
  abort(e.message)
14
13
  end
15
14
 
15
+ def options
16
+ @execute_options ||= {}
17
+ @default_options ||= {}
18
+ @default_options.merge(@execute_options)
19
+ end
20
+
16
21
  def failures?
17
22
  !execute
18
23
  end
@@ -21,17 +26,20 @@ module Teaspoon
21
26
  execute_without_handling(options)
22
27
  rescue Teaspoon::Failure
23
28
  false
29
+ rescue Teaspoon::RunnerException => e
30
+ log(e.message)
31
+ false
24
32
  rescue Teaspoon::Error => e
25
33
  abort(e.message)
26
34
  end
27
35
 
28
- def execute_without_handling(options = {})
29
- @options.merge!(options)
36
+ def execute_without_handling(execute_options = {})
37
+ @execute_options = execute_options
30
38
  @suites = {}
31
- resolve(@options[:files])
39
+ resolve(options[:files])
32
40
 
33
41
  0 == suites.inject(0) do |failures, suite|
34
- export(suite) if @options.include?(:export)
42
+ export(suite) if options.include?(:export)
35
43
  failures += run_specs(suite)
36
44
  log("") # empty line for space
37
45
  failures
@@ -39,7 +47,10 @@ module Teaspoon
39
47
  end
40
48
 
41
49
  def run_specs(suite)
42
- raise Teaspoon::UnknownSuite, "Unknown suite: \"#{suite}\"" unless Teaspoon.configuration.suite_configs[suite.to_s]
50
+ unless Teaspoon.configuration.suite_configs[suite.to_s]
51
+ raise Teaspoon::UnknownSuite, "Unknown suite: \"#{suite}\""
52
+ end
53
+
43
54
  log("Teaspoon running #{suite} suite at #{base_url_for(suite)}")
44
55
  runner = Teaspoon::Runner.new(suite)
45
56
  driver.run_specs(runner, url_for(suite))
@@ -48,9 +59,12 @@ module Teaspoon
48
59
  end
49
60
 
50
61
  def export(suite)
51
- raise Teaspoon::UnknownSuite, "Unknown suite: \"#{suite}\"" unless Teaspoon.configuration.suite_configs[suite.to_s]
62
+ unless Teaspoon.configuration.suite_configs[suite.to_s]
63
+ raise Teaspoon::UnknownSuite, "Unknown suite: \"#{suite}\""
64
+ end
65
+
52
66
  log("Teaspoon exporting #{suite} suite at #{base_url_for(suite)}")
53
- Teaspoon::Exporter.new(suite, url_for(suite, false), @options[:export]).export
67
+ Teaspoon::Exporter.new(suite, url_for(suite, false), options[:export]).export
54
68
  end
55
69
 
56
70
  protected
@@ -66,14 +80,14 @@ module Teaspoon
66
80
  end
67
81
 
68
82
  def start_server
69
- log("Starting the Teaspoon server...")
70
83
  server = Teaspoon::Server.new
84
+ log("Starting the Teaspoon server...") unless server.responsive?
71
85
  server.start
72
86
  server
73
87
  end
74
88
 
75
89
  def suites
76
- return [@options[:suite]] if @options[:suite].present?
90
+ return [options[:suite]] if options[:suite].present?
77
91
  return @suites.keys if @suites.present?
78
92
  Teaspoon.configuration.suite_configs.keys
79
93
  end
@@ -87,19 +101,19 @@ module Teaspoon
87
101
  end
88
102
 
89
103
  def base_url_for(suite)
90
- ["#{@server.url}#{Teaspoon.configuration.mount_at}", suite].join('/')
104
+ ["#{@server.url}#{Teaspoon.configuration.mount_at}", suite].join("/")
91
105
  end
92
106
 
93
107
  def url_for(suite, console = true)
94
- url = [base_url_for(suite), filter(suite)].compact.join('?')
95
- url += "#{(url.include?("?") ? "&" : "?")}reporter=Console" if console
108
+ url = [base_url_for(suite), filter(suite)].compact.join("?")
109
+ url += "#{(url.include?('?') ? '&' : '?')}reporter=Console" if console
96
110
  url
97
111
  end
98
112
 
99
113
  def filter(suite)
100
114
  parts = []
101
- parts << "grep=#{URI::encode(@options[:filter])}" if @options[:filter].present?
102
- (@suites[suite] || @options[:files] || []).flatten.each { |file| parts << "file[]=#{URI::encode(file)}" }
115
+ parts << "grep=#{URI::encode(options[:filter])}" if options[:filter].present?
116
+ (@suites[suite] || options[:files] || []).flatten.each { |file| parts << "file[]=#{URI::encode(file)}" }
103
117
  "#{parts.join('&')}" if parts.present?
104
118
  end
105
119
 
@@ -1,6 +1,5 @@
1
1
  module Teaspoon
2
2
  class Coverage
3
-
4
3
  def initialize(suite_name, config_name, data)
5
4
  @suite_name = suite_name
6
5
  @data = data
@@ -11,7 +10,7 @@ module Teaspoon
11
10
  def generate_reports(&block)
12
11
  input_path do |input|
13
12
  results = []
14
- for format in @config.reports
13
+ @config.reports.each do |format|
15
14
  result = generate_report(input, format)
16
15
  results << result if ["text", "text-summary"].include?(format.to_s)
17
16
  end
@@ -48,7 +47,7 @@ module Teaspoon
48
47
 
49
48
  def generate_report(input, format)
50
49
  output_path = File.join(@config.output_path, @suite_name)
51
- result = %x{#{@executable} report #{format} #{input.shellescape} --dir #{output_path} 2>&1}
50
+ result = %x{#{@executable} report --include=#{input.shellescape} --dir #{output_path} #{format} 2>&1}
52
51
  return result.gsub("Done", "").gsub("Using reporter [#{format}]", "").strip if $?.exitstatus == 0
53
52
  raise Teaspoon::DependencyFailure, "Could not generate coverage report for #{format}"
54
53
  end
@@ -1,5 +1,4 @@
1
1
  module Teaspoon
2
-
3
2
  def self.setup(&block)
4
3
  Teaspoon.dep("Teaspoon.setup is deprecated, use Teaspoon.configure instead. The /initializer/teaspoon.rb file should be removed, and a new teaspoon_env.rb file should be created by running the install generator.")
5
4
  configure(&block)
@@ -16,8 +15,7 @@ module Teaspoon
16
15
  end
17
16
 
18
17
  class Configuration
19
-
20
- def self.context=(*args)
18
+ def self.context=(*_args)
21
19
  Teaspoon.dep("the teaspoon context directive is no longer used, remove it from your configuration.")
22
20
  end
23
21
 
@@ -45,19 +43,26 @@ teaspoon coverage directive has changed and is now more flexible, define coverag
45
43
  > set: config.use_coverage = "CI"
46
44
  MESSAGE
47
45
 
48
- for method in %w{coverage coverage_reports coverage_output_dir statements_coverage_threshold functions_coverage_threshold branches_coverage_threshold lines_coverage_threshold}
49
- define_singleton_method("#{method}=") do |val|
46
+ [
47
+ "coverage",
48
+ "coverage_reports",
49
+ "coverage_output_dir",
50
+ "statements_coverage_threshold",
51
+ "functions_coverage_threshold",
52
+ "branches_coverage_threshold",
53
+ "lines_coverage_threshold"
54
+ ].each do |method|
55
+ define_singleton_method("#{method}=") do |*_args|
50
56
  Teaspoon.dep(@coverage_dep_message, :coverage)
51
57
  end
52
58
  end
53
59
 
54
60
  class Suite
55
-
56
- def js_config=(*args)
61
+ def js_config=(*_args)
57
62
  Teaspoon.dep("the teaspoon suite js_config directive is no longer used, use the install generator to install the boot partial and customize it instead.", :js_config)
58
63
  end
59
64
 
60
- def normalize_asset_path=(*args)
65
+ def normalize_asset_path=(*_args)
61
66
  Teaspoon.dep("the teaspoon suite normalize_asset_path directive is no longer used, reopen Teaspoon::Suite and define a normalize_js_extension method instead.", :normalize_asset_path)
62
67
  end
63
68
  end
@@ -1,8 +1,8 @@
1
1
  module Teaspoon
2
2
  module Drivers
3
-
4
3
  autoload :PhantomjsDriver, "teaspoon/drivers/phantomjs_driver"
5
- autoload :SeleniumDriver, "teaspoon/drivers/selenium_driver"
4
+ autoload :SeleniumDriver, "teaspoon/drivers/selenium_driver"
5
+ autoload :CapybaraWebkitDriver, "teaspoon/drivers/capybara_webkit_driver"
6
6
 
7
7
  class Base
8
8
  end
@@ -0,0 +1,33 @@
1
+ begin
2
+ require "capybara-webkit"
3
+ rescue LoadError
4
+ STDOUT.print("Could not find Capybara Webkit. Install the capybara-webkit gem.\n")
5
+ exit(1)
6
+ end
7
+
8
+ module Teaspoon
9
+ module Drivers
10
+ class CapybaraWebkitDriver < Base
11
+ def initialize(_ = nil)
12
+ end
13
+
14
+ def run_specs(runner, url)
15
+ session.visit(url)
16
+
17
+ session.document.synchronize(Teaspoon.configuration.driver_timeout.to_i) do
18
+ done = session.evaluate_script("window.Teaspoon && window.Teaspoon.finished")
19
+ (session.evaluate_script("window.Teaspoon && window.Teaspoon.getMessages()") || []).each do |line|
20
+ runner.process("#{line}\n")
21
+ end
22
+ done
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def session
29
+ @session ||= Capybara::Session.new(:webkit)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -76,8 +76,8 @@
76
76
  if (_this.errorTimeout) clearTimeout(_this.errorTimeout);
77
77
  if (_this.errored) {
78
78
  _this.errorTimeout = setTimeout((function() {
79
- return _this.fail("Javascript error has cause a timeout.");
80
- }), 1000);
79
+ return _this.fail("Javascript error has caused a timeout.");
80
+ }), _this.timeout);
81
81
  return _this.errored = false;
82
82
  }
83
83
  },
@@ -12,9 +12,9 @@ module Teaspoon
12
12
  def initialize(options = nil)
13
13
  options ||= []
14
14
  case options
15
- when Array then @options = options
15
+ when Array then @options = options
16
16
  when String then @options = options.split(" ")
17
- when Hash then @options = options.map { |k, v| "--#{k}=#{v}" }
17
+ when Hash then @options = options.map { |k, v| "--#{k}=#{v}" }
18
18
  else raise Teaspoon::UnknownDriverOptions, "Unknown driver options -- supply a string, array or hash"
19
19
  end
20
20
  end
@@ -28,11 +28,20 @@ module Teaspoon
28
28
  protected
29
29
 
30
30
  def run(*args, &block)
31
- IO.popen([executable, *args].join(' ')) { |io| io.each(&block) }
31
+ IO.popen([executable, *args].join(" ")) { |io| io.each(&block) }
32
32
  end
33
33
 
34
34
  def driver_options(url)
35
- [@options, script, url.shellescape, Teaspoon.configuration.driver_timeout].flatten.compact
35
+ [
36
+ @options,
37
+ escape_quotes(script),
38
+ escape_quotes(url),
39
+ Teaspoon.configuration.driver_timeout
40
+ ].flatten.compact
41
+ end
42
+
43
+ def escape_quotes(string)
44
+ %{"#{string.gsub('"', '\"')}"}
36
45
  end
37
46
 
38
47
  def executable
@@ -8,11 +8,10 @@ end
8
8
  module Teaspoon
9
9
  module Drivers
10
10
  class SeleniumDriver < Base
11
-
12
11
  def initialize(options = nil)
13
12
  options ||= {}
14
13
  case options
15
- when Hash then @options = options
14
+ when Hash then @options = options
16
15
  when String then @options = JSON.parse(options)
17
16
  else raise Teaspoon::UnknownDriverOptions, "Unknown driver options -- supply a hash or json string"
18
17
  end
@@ -39,14 +38,13 @@ module Teaspoon
39
38
  protected
40
39
 
41
40
  def driver_options
42
- @driver_options ||= HashWithIndifferentAccess.new({
41
+ @driver_options ||= HashWithIndifferentAccess.new(
43
42
  client_driver: :firefox,
44
43
  timeout: Teaspoon.configuration.driver_timeout.to_i,
45
44
  interval: 0.01,
46
45
  message: "Timed out"
47
- }).merge(@options)
46
+ ).merge(@options)
48
47
  end
49
48
  end
50
49
  end
51
50
  end
52
-
@@ -4,9 +4,31 @@ require "teaspoon/instrumentation"
4
4
 
5
5
  module Teaspoon
6
6
  class Engine < ::Rails::Engine
7
-
8
7
  isolate_namespace Teaspoon
9
8
 
9
+ ASSET_MANIFEST = [
10
+ # core library
11
+ 'teaspoon.css',
12
+ 'teaspoon-teaspoon.js',
13
+
14
+ # framework ties
15
+ 'teaspoon/*.js',
16
+ 'teaspoon-jasmine.js',
17
+ 'teaspoon-mocha.js',
18
+ 'teaspoon-qunit.js',
19
+
20
+ # frameworks
21
+ 'jasmine/1.3.1.js',
22
+ 'jasmine/2.0.0.js',
23
+ 'mocha/1.10.0.js',
24
+ 'mocha/1.17.1.js',
25
+ 'qunit/1.12.0.js',
26
+ 'qunit/1.14.0.js',
27
+
28
+ # all support libraries
29
+ 'support/*.js'
30
+ ]
31
+
10
32
  initializer :assets, group: :all do |app|
11
33
  begin
12
34
  Teaspoon::Environment.require_environment
@@ -16,6 +38,7 @@ module Teaspoon
16
38
 
17
39
  Teaspoon::Engine.default_root_path(app.root) # default the root if it's not set
18
40
  Teaspoon::Engine.append_asset_paths(app.config.assets) # append the asset paths from the configuration
41
+ Teaspoon::Engine.add_precompiled_assets(app.config.assets)
19
42
  end
20
43
 
21
44
  config.after_initialize do |app|
@@ -23,8 +46,6 @@ module Teaspoon
23
46
  Teaspoon::Engine.prepend_routes(app) # prepend routes so a catchall doesn't get in the way
24
47
  end
25
48
 
26
- private
27
-
28
49
  def self.default_root_path(root)
29
50
  Teaspoon.configuration.root ||= root
30
51
  end
@@ -35,16 +56,23 @@ module Teaspoon
35
56
  end
36
57
  end
37
58
 
59
+ def self.add_precompiled_assets(assets)
60
+ assets.precompile += ASSET_MANIFEST
61
+ end
62
+
38
63
  def self.inject_instrumentation
39
64
  Sprockets::Environment.send(:include, Teaspoon::SprocketsInstrumentation)
65
+ Sprockets::Index.send(:include, Teaspoon::SprocketsInstrumentation)
40
66
  end
41
67
 
42
68
  def self.prepend_routes(app)
43
- return if Teaspoon::Engine.routes.recognize_path('/') rescue nil
69
+ mount_at = Teaspoon.configuration.mount_at
70
+
71
+ return if app.routes.recognize_path(mount_at)[:action] != "routing_error" rescue nil
44
72
  require Teaspoon::Engine.root.join("app/controllers/teaspoon/suite_controller")
45
73
 
46
74
  app.routes.prepend do
47
- mount Teaspoon::Engine => Teaspoon.configuration.mount_at, as: "teaspoon"
75
+ mount Teaspoon::Engine => mount_at, as: "teaspoon"
48
76
  end
49
77
  end
50
78
  end
@@ -2,7 +2,6 @@ require "teaspoon/exceptions"
2
2
 
3
3
  module Teaspoon
4
4
  module Environment
5
-
6
5
  def self.load(options = {})
7
6
  require_environment(options[:environment])
8
7
  raise "Rails environment not found." unless rails_loaded?
@@ -28,11 +27,10 @@ module Teaspoon
28
27
  standard_environments.each do |filename|
29
28
  file = File.expand_path(filename, Dir.pwd)
30
29
  return require_env(file) if File.exists?(file)
31
- #file = File.expand_path(filename, File.join(Dir.pwd, '../..'))
32
- #return require_env(file) if File.exists?(file)
33
30
  end
34
31
 
35
- raise Teaspoon::EnvironmentNotFound, "Unable to load Teaspoon environment in {#{standard_environments.join(', ')}}"
32
+ raise Teaspoon::EnvironmentNotFound,
33
+ "Unable to load Teaspoon environment in {#{standard_environments.join(', ')}}"
36
34
  end
37
35
 
38
36
  def self.standard_environments
@@ -6,6 +6,7 @@ module Teaspoon
6
6
  class RunnerException < Teaspoon::Error; end
7
7
  class ExporterException < Teaspoon::Error; end
8
8
  class UnknownFramework < Teaspoon::Error; end
9
+ class UnknownCoverage < Teaspoon::Error; end
9
10
  class UnknownDriver < Teaspoon::Error; end
10
11
  class UnknownDriverOptions < Teaspoon::Error; end
11
12
  class UnknownFormatter < Teaspoon::Error; end
@@ -17,12 +18,14 @@ module Teaspoon
17
18
  class FileNotWritable < Teaspoon::Error; end
18
19
 
19
20
  module ExceptionHandling
20
-
21
21
  def self.add_rails_handling
22
22
  return unless Teaspoon.configuration.driver == "phantomjs"
23
23
 
24
- #Rails.application.config.assets.debug = false # debugging should be off to display errors in the suite_controller
25
- Rails.application.config.action_dispatch.show_exceptions = true # we want rails to display exceptions
24
+ # debugging should be off to display errors in the suite_controller
25
+ # Rails.application.config.assets.debug = false
26
+
27
+ # we want rails to display exceptions
28
+ Rails.application.config.action_dispatch.show_exceptions = true
26
29
 
27
30
  # override the render exception method in ActionDispatch to raise a javascript exception
28
31
  render_exceptions_with_javascript
@@ -32,10 +35,10 @@ module Teaspoon
32
35
 
33
36
  def self.render_exceptions_with_javascript
34
37
  ActionDispatch::DebugExceptions.class_eval do
35
- def render_exception(env, exception)
38
+ def render_exception(_env, exception)
36
39
  message = "#{exception.class.name}: #{exception.message}"
37
40
  body = "<script>throw Error(#{[message, exception.backtrace].join("\n").inspect})</script>"
38
- [200, {'Content-Type' => "text/html;", 'Content-Length' => body.bytesize.to_s}, [body]]
41
+ [200, { "Content-Type" => "text/html;", "Content-Length" => body.bytesize.to_s }, [body]]
39
42
  end
40
43
  end
41
44
  end