Skip to content

Commit 158cd1f

Browse files
committed
Add runner.
1 parent 3d9e05c commit 158cd1f

15 files changed

+1053
-94
lines changed

.github/workflows/ruby.yml

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
---
2+
name: ruby-tests
3+
4+
on:
5+
pull_request_target:
6+
push:
7+
branches:
8+
- main
9+
workflow_dispatch:
10+
inputs: {}
11+
12+
jobs:
13+
build:
14+
name: Tests with Ruby ${{ matrix.ruby }} and ${{ matrix.gemfile }}
15+
runs-on: "ubuntu-latest"
16+
if: |
17+
github.actor == 'dependabot[bot]' && github.event_name == 'pull_request_target' ||
18+
github.actor != 'dependabot[bot]'
19+
strategy:
20+
fail-fast: false
21+
matrix:
22+
ruby: ["3.4", "3.3"]
23+
gemfile:
24+
- Gemfile
25+
services:
26+
redis:
27+
image: redis
28+
ports:
29+
- 6379:6379
30+
options: >-
31+
--health-cmd "redis-cli ping" --health-interval 10s --health-timeout
32+
5s --health-retries 5
33+
34+
steps:
35+
- uses: actions/checkout@v4
36+
37+
- uses: actions/cache@v4
38+
with:
39+
path: vendor/bundle
40+
key: >
41+
${{ runner.os }}-${{ matrix.ruby }}-gems-${{
42+
hashFiles(matrix.gemfile) }}-${{hashFiles('zee.gemspec')}}
43+
44+
- name: Set up Ruby
45+
uses: ruby/setup-ruby@v1
46+
with:
47+
ruby-version: ${{ matrix.ruby }}
48+
49+
- name: Install gem dependencies
50+
env:
51+
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
52+
run: |
53+
gem install bundler
54+
bundle config set with default:development:test
55+
bundle config path vendor/bundle
56+
bundle update --jobs 4 --retry 3
57+
58+
- name: Run Tests
59+
env:
60+
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
61+
run: |
62+
bundle exec rake

.rubocop.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ inherit_gem:
33
rubocop-fnando: .rubocop.yml
44

55
AllCops:
6-
TargetRubyVersion: 3.2
6+
TargetRubyVersion: 3.3
77

88
Style/GlobalVars:
99
Exclude:

README.md

+59-5
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ methods like the following:
3232

3333
```ruby
3434
class SampleTest < Minitest::Test
35-
test 'useless test' do
35+
test "useless test" do
3636
assert true
3737
end
3838
end
@@ -55,7 +55,45 @@ class SampleTest < Minitest::Test
5555
DB.disconnect
5656
end
5757

58-
test 'useless test' do
58+
test "useless test" do
59+
assert true
60+
end
61+
end
62+
```
63+
64+
If you want to skip slow tests, you can use the `slow_test` method, which only
65+
runs the test when `MT_RUN_SLOW_TESTS` environment variable is set.
66+
67+
```ruby
68+
# Only run slow tests in CI. You can bypass it locally by using
69+
# something like `MT_RUN_SLOW_TESTS=1 rake`.
70+
ENV["MT_RUN_SLOW_TESTS"] ||= ENV["CI"]
71+
72+
class SampleTest < Minitest::Test
73+
test "useless test" do
74+
slow_test
75+
sleep 1
76+
assert true
77+
end
78+
end
79+
```
80+
81+
You can change the default threshold by setting `Minitest::Test.slow_threshold`.
82+
The default value is `0.1` (100ms).
83+
84+
```ruby
85+
Minitest::Test.slow_threshold = 0.1
86+
```
87+
88+
This config can also be changed per class:
89+
90+
```ruby
91+
class SampleTest < Minitest::Test
92+
self.slow_threshold = 0.1
93+
94+
test "useless test" do
95+
slow_test
96+
sleep 1
5997
assert true
6098
end
6199
end
@@ -65,14 +103,30 @@ Finally, you can also use `let`.
65103

66104
```ruby
67105
class SampleTest < Minitest::Test
68-
let(:token) { 'secret' }
106+
let(:token) { "secret" }
69107

70-
test 'set token' do
71-
assert_equal 'secret', token
108+
test "set token" do
109+
assert_equal "secret", token
72110
end
73111
end
74112
```
75113

114+
## Running tests
115+
116+
`minitest-utils` comes with a runner: `mt`.
117+
118+
```
119+
120+
```
121+
122+
It supports `.minitestignore`, which only matches file names partially. Comments
123+
starting with `#` are ignored.
124+
125+
```
126+
# Ignore all tests in test/fixtures
127+
test/fixtures
128+
```
129+
76130
## Screenshots
77131

78132
![](https://raw.githubusercontent.com/fnando/minitest-utils/main/screenshots/light-failing.png)

exe/mt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/usr/bin/env ruby
2+
# frozen_string_literal: true
3+
4+
require_relative "../lib/minitest/utils/cli"
5+
Minitest::Utils::CLI.loaded_via_bundle_exec = ENV.key?("BUNDLER_VERSION")
6+
Minitest::Utils::CLI.new(ARGV.dup).start

lib/minitest/utils.rb

+9-10
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@
33
module Minitest
44
module Utils
55
require "minitest"
6-
require "benchmark"
76
require "pathname"
8-
require "minitest/utils/version"
9-
require "minitest/utils/reporter"
10-
require "minitest/utils/extension"
11-
require "minitest/utils/test_notifier_reporter"
7+
require_relative "utils/version"
8+
require_relative "utils/reporter"
9+
require_relative "utils/extension"
10+
require_relative "utils/test_notifier_reporter"
1211

1312
load_lib = lambda do |path, &block|
1413
require path
@@ -23,21 +22,21 @@ module Utils
2322
load_lib.call "capybara"
2423

2524
load_lib.call "webmock" do
26-
require "minitest/utils/setup/webmock"
25+
require_relative "utils/setup/webmock"
2726
end
2827

2928
load_lib.call "database_cleaner" do
30-
require "minitest/utils/setup/database_cleaner"
29+
require_relative "utils/setup/database_cleaner"
3130
end
3231

3332
load_lib.call "factory_girl" do
34-
require "minitest/utils/setup/factory_girl"
33+
require_relative "utils/setup/factory_girl"
3534
end
3635

3736
load_lib.call "factory_bot" do
38-
require "minitest/utils/setup/factory_bot"
37+
require_relative "utils/setup/factory_bot"
3938
end
4039

41-
require "minitest/utils/railtie" if defined?(Rails)
40+
require_relative "utils/railtie" if defined?(Rails)
4241
end
4342
end

0 commit comments

Comments
 (0)