top_tests 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e7dda877ea636154577883b27d5d45909ace9d6c
4
+ data.tar.gz: 13d749b4704108b1bde1ed72e682b0d5d1acc7b9
5
+ SHA512:
6
+ metadata.gz: cd223c0d87ed0f7a3823ba5e22d7459efc5a9764ed25b4b3af26b9ba1f56dbdd4d4aa0fe0f29eb1b81a36e53415716c39d5736445245a73bdf52b2e0f54eee9d
7
+ data.tar.gz: 2e019d6d355d95d76effcdc54eeca92e332179732a39ba44c44ceb072d25db6cafb3f07503366d4d6cfe47c629aaf9c0358415922e3dfbd57008d356cadc7e35
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in top_tests.gemspec
4
4
  gemspec
5
+
6
+ gem 'minitest', '>= 2.11.2'
data/Gemfile.lock CHANGED
@@ -1,14 +1,16 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- top_tests (0.0.1)
4
+ top_tests (0.0.3)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
+ minitest (3.5.0)
9
10
 
10
11
  PLATFORMS
11
12
  ruby
12
13
 
13
14
  DEPENDENCIES
15
+ minitest (>= 2.11.2)
14
16
  top_tests!
data/README.rdoc CHANGED
@@ -2,11 +2,44 @@
2
2
  Top tests displays your 10 slowest tests after execution. The goal is to help you
3
3
  keeping your tests fast.
4
4
 
5
- == How to setup top tests?
6
- First of all top tests works only with ActiveSupport::TestCase. Then require top
7
- tests and just include into your test class:
5
+ Moreover top tests can break your build if any test is taking longer than a specified duration.
8
6
 
9
- class ActiveSupport::TestCase
7
+ Since version 0.0.4, Top tests works only with Ruby 2.0 and Rails 4.0
8
+
9
+ == How to use it?
10
+ Add to your Gemfile.
11
+
12
+ group :test do
13
+ gem 'top_tests'
14
+ end
15
+
16
+ Then require top tests and just include it into your test class:
17
+
18
+ class SampleTest < MiniTest::Unit::TestCase
10
19
  include TopTests
20
+
21
+ # Break your build if any test's duration is longer than ...
22
+ self.max_duration = 0.5 # Optional, nil by default (in seconds)
11
23
  end
12
24
 
25
+ Sample output:
26
+
27
+ Top 10 slowest tests:
28
+ 0.429 ApplicationControllerTest#test_notify_error
29
+ 0.322 HoneyBadgersControllerTest#test_show
30
+ 0.200 BearsControllerTest#test_destroy_collection
31
+ 0.134 SuricatsControllerTest#test_can_not_update
32
+ 0.124 SuricatsControllerTest#test_create
33
+ 0.105 SuricatsControllerTest#test_update
34
+ 0.096 HoneyBadgersControllerTest#test_create
35
+ 0.093 HoneyBadgersControllerTest#test_update
36
+ 0.091 SuricatsControllerTest#test_destroy
37
+ 0.090 HoneyBadgersControllerTest#test_show
38
+
39
+ Sample output when few tests are too slow:
40
+
41
+ TEST?FAIL! 3 test(s) are taking longer than 0.2 seconds:
42
+ 0.410 HoneyBadgerTest#test_fighting_a_cobra
43
+ 0.228 SuricatTest#test_caught_by_an_eagle
44
+ 0.203 HoneyBadgerTest#test_eating_larvae
45
+
@@ -2,7 +2,7 @@
2
2
 
3
3
  module TopTests
4
4
 
5
- VERSION = '0.0.3'.freeze
5
+ VERSION = '0.0.4'.freeze
6
6
 
7
7
  end
8
8
 
data/lib/top_tests.rb CHANGED
@@ -7,23 +7,25 @@ module TopTests
7
7
  #####################
8
8
 
9
9
  def self.included(klass)
10
- klass.setup :start_timer
11
- klass.teardown :stop_timer
12
10
  klass.extend(ClassMethods)
13
- at_exit { at_exit { klass.at_exit_callback } }
11
+ MiniTest::Unit.after_tests { klass.after_all_tests }
14
12
  end
15
13
 
16
14
  ########################
17
15
  ### Instance methods ###
18
16
  ########################
19
17
 
20
- def start_timer
18
+ def before_setup
19
+ super
21
20
  @timer_started_at = Time.now
22
21
  end
23
22
 
24
- def stop_timer
25
- name = self.class.to_s + '#' + @__name__
26
- self.class.tests_durations << [name, Time.now - @timer_started_at]
23
+ def after_teardown
24
+ super
25
+ if @timer_started_at # Unset when a setup hook fails before top test.
26
+ name = self.class.to_s + '#' + @__name__
27
+ self.class.tests_durations << [name, Time.now - @timer_started_at]
28
+ end
27
29
  end
28
30
 
29
31
  #####################
@@ -40,7 +42,7 @@ module TopTests
40
42
  end
41
43
 
42
44
  def max_duration
43
- @@max_duration
45
+ @@max_duration ||= nil
44
46
  end
45
47
 
46
48
  def top_tests
@@ -56,21 +58,25 @@ module TopTests
56
58
  end
57
59
 
58
60
  def print_top_tests
59
- puts "\nTop tests:"
61
+ puts "\nTop 10 slowest tests:"
60
62
  puts format_tests(top_tests.shift(10))
61
63
  puts
62
64
  end
63
65
 
64
66
  def check_tests_duration
65
67
  if !slow_tests.empty?
66
- puts "\nTEST?FAIL! #{slow_tests.count} test(s) are taking longer than #{max_duration} seconds:"
68
+ if slow_tests.size == 1
69
+ puts "\nTEST?FAIL! 1 test is taking longer than #{max_duration} seconds:"
70
+ else
71
+ puts "\nTEST?FAIL! #{slow_tests.count} tests are taking longer than #{max_duration} seconds:"
72
+ end
67
73
  puts format_tests(slow_tests)
68
74
  puts
69
75
  exit 1
70
76
  end
71
77
  end
72
78
 
73
- def at_exit_callback
79
+ def after_all_tests
74
80
  check_tests_duration
75
81
  print_top_tests
76
82
  end
@@ -0,0 +1,14 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'minitest/autorun'
4
+ require 'top_tests'
5
+
6
+ class FailingTest < MiniTest::Unit::TestCase
7
+
8
+ include TopTests
9
+
10
+ def test_bad
11
+ assert(false)
12
+ end
13
+
14
+ end
data/test/fast_test.rb ADDED
@@ -0,0 +1,16 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'minitest/autorun'
4
+ require 'top_tests'
5
+
6
+ class FastTest < MiniTest::Unit::TestCase
7
+
8
+ include TopTests
9
+
10
+ self.max_duration = 0.5
11
+
12
+ def test_good
13
+ sleep(0.499)
14
+ end
15
+
16
+ end
data/test/slow_test.rb ADDED
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'minitest/autorun'
4
+ require 'top_tests'
5
+
6
+ class SlowTest < MiniTest::Unit::TestCase
7
+
8
+ include TopTests
9
+
10
+ self.max_duration = 0.5
11
+
12
+ def test_good
13
+ sleep(0.5)
14
+ end
15
+
16
+ def test_bad
17
+ assert(true)
18
+ end
19
+ end
data/top_tests.gemspec CHANGED
@@ -6,10 +6,10 @@ Gem::Specification.new do |s|
6
6
  s.name = 'top_tests'
7
7
  s.version = TopTests::VERSION.dup
8
8
  s.authors = ['Alexis Bernard']
9
- s.email = ['alexis@official.fm']
10
- s.homepage = 'https://github.com/officialfm/top_tests'
11
- s.summary = 'Top tests displays your 10 slowest tests after execution'
12
- s.description = 'Top tests displays your 10 slowest tests after execution'
9
+ s.email = ['alexis@bernard.io']
10
+ s.homepage = 'https://github.com/alexisbernard/top_tests'
11
+ s.summary = 'Top tests lists the 10 slowest tests after execution'
12
+ s.description = 'Top tests lists the 10 slowest tests after execution'
13
13
 
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,19 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: top_tests
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 0.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Alexis Bernard
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2011-12-12 00:00:00.000000000Z
11
+ date: 2013-04-04 00:00:00.000000000 Z
13
12
  dependencies: []
14
- description: Top tests displays your 10 slowest tests after execution
13
+ description: Top tests lists the 10 slowest tests after execution
15
14
  email:
16
- - alexis@official.fm
15
+ - alexis@bernard.io
17
16
  executables: []
18
17
  extensions: []
19
18
  extra_rdoc_files: []
@@ -26,29 +25,31 @@ files:
26
25
  - Rakefile
27
26
  - lib/top_tests.rb
28
27
  - lib/top_tests/version.rb
28
+ - test/failing_test.rb
29
+ - test/fast_test.rb
30
+ - test/slow_test.rb
29
31
  - top_tests.gemspec
30
- homepage: https://github.com/officialfm/top_tests
32
+ homepage: https://github.com/alexisbernard/top_tests
31
33
  licenses: []
34
+ metadata: {}
32
35
  post_install_message:
33
36
  rdoc_options: []
34
37
  require_paths:
35
38
  - lib
36
39
  required_ruby_version: !ruby/object:Gem::Requirement
37
- none: false
38
40
  requirements:
39
- - - ! '>='
41
+ - - '>='
40
42
  - !ruby/object:Gem::Version
41
43
  version: '0'
42
44
  required_rubygems_version: !ruby/object:Gem::Requirement
43
- none: false
44
45
  requirements:
45
- - - ! '>='
46
+ - - '>='
46
47
  - !ruby/object:Gem::Version
47
48
  version: '0'
48
49
  requirements: []
49
50
  rubyforge_project:
50
- rubygems_version: 1.8.10
51
+ rubygems_version: 2.0.0.rc.2
51
52
  signing_key:
52
- specification_version: 3
53
- summary: Top tests displays your 10 slowest tests after execution
53
+ specification_version: 4
54
+ summary: Top tests lists the 10 slowest tests after execution
54
55
  test_files: []