crspec 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/lib/crspec/version.rb +1 -1
- metadata +1 -156
- data/benchmark/README.md +0 -56
- data/benchmark/run.rb +0 -72
- data/benchmark/spec/user_service_crspec_spec.rb +0 -15
- data/benchmark/spec/user_service_rspec_spec.rb +0 -16
- data/benchmark/target_service.rb +0 -12
- data/benchmark/test/user_service_test.rb +0 -18
- data/demo.rb +0 -129
- data/samples/book_store/.dockerignore +0 -51
- data/samples/book_store/.gitattributes +0 -9
- data/samples/book_store/.github/dependabot.yml +0 -12
- data/samples/book_store/.github/workflows/ci.yml +0 -130
- data/samples/book_store/.gitignore +0 -35
- data/samples/book_store/.kamal/hooks/docker-setup.sample +0 -3
- data/samples/book_store/.kamal/hooks/post-app-boot.sample +0 -3
- data/samples/book_store/.kamal/hooks/post-deploy.sample +0 -14
- data/samples/book_store/.kamal/hooks/post-proxy-reboot.sample +0 -3
- data/samples/book_store/.kamal/hooks/pre-app-boot.sample +0 -3
- data/samples/book_store/.kamal/hooks/pre-build.sample +0 -51
- data/samples/book_store/.kamal/hooks/pre-connect.sample +0 -47
- data/samples/book_store/.kamal/hooks/pre-deploy.sample +0 -122
- data/samples/book_store/.kamal/hooks/pre-proxy-reboot.sample +0 -3
- data/samples/book_store/.kamal/secrets +0 -20
- data/samples/book_store/.rubocop.yml +0 -8
- data/samples/book_store/.ruby-version +0 -1
- data/samples/book_store/Dockerfile +0 -77
- data/samples/book_store/Gemfile +0 -67
- data/samples/book_store/Gemfile.lock +0 -572
- data/samples/book_store/README.md +0 -24
- data/samples/book_store/Rakefile +0 -6
- data/samples/book_store/app/assets/images/.keep +0 -0
- data/samples/book_store/app/assets/stylesheets/application.css +0 -10
- data/samples/book_store/app/controllers/application_controller.rb +0 -2
- data/samples/book_store/app/controllers/books_controller.rb +0 -30
- data/samples/book_store/app/controllers/comments_controller.rb +0 -21
- data/samples/book_store/app/controllers/concerns/.keep +0 -0
- data/samples/book_store/app/controllers/users_controller.rb +0 -21
- data/samples/book_store/app/helpers/application_helper.rb +0 -2
- data/samples/book_store/app/helpers/books_helper.rb +0 -2
- data/samples/book_store/app/helpers/comments_helper.rb +0 -2
- data/samples/book_store/app/helpers/users_helper.rb +0 -2
- data/samples/book_store/app/javascript/application.js +0 -3
- data/samples/book_store/app/javascript/controllers/application.js +0 -9
- data/samples/book_store/app/javascript/controllers/hello_controller.js +0 -7
- data/samples/book_store/app/javascript/controllers/index.js +0 -4
- data/samples/book_store/app/jobs/application_job.rb +0 -7
- data/samples/book_store/app/mailers/application_mailer.rb +0 -4
- data/samples/book_store/app/models/application_record.rb +0 -3
- data/samples/book_store/app/models/book.rb +0 -10
- data/samples/book_store/app/models/comment.rb +0 -6
- data/samples/book_store/app/models/concerns/.keep +0 -0
- data/samples/book_store/app/models/user.rb +0 -4
- data/samples/book_store/app/views/layouts/application.html.erb +0 -29
- data/samples/book_store/app/views/layouts/mailer.html.erb +0 -13
- data/samples/book_store/app/views/layouts/mailer.text.erb +0 -1
- data/samples/book_store/app/views/pwa/manifest.json.erb +0 -22
- data/samples/book_store/app/views/pwa/service-worker.js +0 -26
- data/samples/book_store/bin/brakeman +0 -7
- data/samples/book_store/bin/bundler-audit +0 -6
- data/samples/book_store/bin/ci +0 -6
- data/samples/book_store/bin/dev +0 -2
- data/samples/book_store/bin/docker-entrypoint +0 -8
- data/samples/book_store/bin/importmap +0 -4
- data/samples/book_store/bin/jobs +0 -6
- data/samples/book_store/bin/kamal +0 -16
- data/samples/book_store/bin/rails +0 -4
- data/samples/book_store/bin/rake +0 -4
- data/samples/book_store/bin/rubocop +0 -8
- data/samples/book_store/bin/setup +0 -35
- data/samples/book_store/bin/thrust +0 -5
- data/samples/book_store/config/application.rb +0 -27
- data/samples/book_store/config/boot.rb +0 -4
- data/samples/book_store/config/bundler-audit.yml +0 -5
- data/samples/book_store/config/cable.yml +0 -17
- data/samples/book_store/config/cache.yml +0 -16
- data/samples/book_store/config/ci.rb +0 -24
- data/samples/book_store/config/credentials.yml.enc +0 -1
- data/samples/book_store/config/database.yml +0 -45
- data/samples/book_store/config/deploy.yml +0 -119
- data/samples/book_store/config/environment.rb +0 -5
- data/samples/book_store/config/environments/development.rb +0 -78
- data/samples/book_store/config/environments/production.rb +0 -90
- data/samples/book_store/config/environments/test.rb +0 -53
- data/samples/book_store/config/importmap.rb +0 -7
- data/samples/book_store/config/initializers/assets.rb +0 -7
- data/samples/book_store/config/initializers/content_security_policy.rb +0 -29
- data/samples/book_store/config/initializers/filter_parameter_logging.rb +0 -8
- data/samples/book_store/config/initializers/inflections.rb +0 -16
- data/samples/book_store/config/locales/en.yml +0 -31
- data/samples/book_store/config/puma.rb +0 -42
- data/samples/book_store/config/queue.yml +0 -18
- data/samples/book_store/config/recurring.yml +0 -15
- data/samples/book_store/config/routes.rb +0 -17
- data/samples/book_store/config/storage.yml +0 -27
- data/samples/book_store/config.ru +0 -6
- data/samples/book_store/db/cable_schema.rb +0 -11
- data/samples/book_store/db/cache_schema.rb +0 -12
- data/samples/book_store/db/migrate/20260731035441_create_users.rb +0 -10
- data/samples/book_store/db/migrate/20260731035506_create_books.rb +0 -11
- data/samples/book_store/db/migrate/20260731035528_create_comments.rb +0 -11
- data/samples/book_store/db/queue_schema.rb +0 -129
- data/samples/book_store/db/schema.rb +0 -39
- data/samples/book_store/db/seeds.rb +0 -9
- data/samples/book_store/lib/tasks/.keep +0 -0
- data/samples/book_store/log/.keep +0 -0
- data/samples/book_store/public/400.html +0 -135
- data/samples/book_store/public/404.html +0 -135
- data/samples/book_store/public/406-unsupported-browser.html +0 -135
- data/samples/book_store/public/422.html +0 -135
- data/samples/book_store/public/500.html +0 -135
- data/samples/book_store/public/icon.png +0 -0
- data/samples/book_store/public/icon.svg +0 -3
- data/samples/book_store/public/robots.txt +0 -1
- data/samples/book_store/script/.keep +0 -0
- data/samples/book_store/spec/models/book_spec.rb +0 -42
- data/samples/book_store/spec/models/comment_spec.rb +0 -22
- data/samples/book_store/spec/models/user_advanced_spec.rb +0 -27
- data/samples/book_store/spec/models/user_spec.rb +0 -30
- data/samples/book_store/spec/rails_helper.rb +0 -36
- data/samples/book_store/spec/rails_parallel_spec.rb +0 -23
- data/samples/book_store/spec/requests/books_spec.rb +0 -21
- data/samples/book_store/spec/requests/users_spec.rb +0 -14
- data/samples/book_store/spec/services/inventory_service_spec.rb +0 -28
- data/samples/book_store/spec/services/time_dependent_service_spec.rb +0 -26
- data/samples/book_store/spec/spec_helper.rb +0 -16
- data/samples/book_store/spec/system/book_store_system_spec.rb +0 -18
- data/samples/book_store/storage/.keep +0 -0
- data/samples/book_store/test/controllers/.keep +0 -0
- data/samples/book_store/test/controllers/books_controller_test.rb +0 -7
- data/samples/book_store/test/controllers/comments_controller_test.rb +0 -7
- data/samples/book_store/test/controllers/users_controller_test.rb +0 -7
- data/samples/book_store/test/fixtures/books.yml +0 -11
- data/samples/book_store/test/fixtures/comments.yml +0 -11
- data/samples/book_store/test/fixtures/files/.keep +0 -0
- data/samples/book_store/test/fixtures/users.yml +0 -9
- data/samples/book_store/test/helpers/.keep +0 -0
- data/samples/book_store/test/integration/.keep +0 -0
- data/samples/book_store/test/mailers/.keep +0 -0
- data/samples/book_store/test/models/.keep +0 -0
- data/samples/book_store/test/models/book_test.rb +0 -7
- data/samples/book_store/test/models/comment_test.rb +0 -7
- data/samples/book_store/test/models/user_test.rb +0 -7
- data/samples/book_store/test/test_helper.rb +0 -15
- data/samples/book_store/tmp/.keep +0 -0
- data/samples/book_store/tmp/pids/.keep +0 -0
- data/samples/book_store/tmp/storage/.keep +0 -0
- data/samples/book_store/vendor/.keep +0 -0
- data/samples/book_store/vendor/javascript/.keep +0 -0
- data/samples/user_spec.rb +0 -31
- data/test/crspec/configuration_test.rb +0 -76
- data/test/crspec/execution_context_test.rb +0 -61
- data/test/crspec/mock_test.rb +0 -55
- data/test/crspec/rails_test.rb +0 -62
- data/test/crspec/runner_test.rb +0 -68
- data/test/crspec/transpiler_test.rb +0 -41
- data/test/test_helper.rb +0 -6
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "test_helper"
|
|
4
|
-
require "tmpdir"
|
|
5
|
-
|
|
6
|
-
class ConfigurationTest < Minitest::Test
|
|
7
|
-
def setup
|
|
8
|
-
Crspec.reset_configuration!
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def teardown
|
|
12
|
-
Crspec.reset_configuration!
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def test_configuration_hooks_and_module_inclusion
|
|
16
|
-
helper_module = Module.new do
|
|
17
|
-
def custom_helper_method
|
|
18
|
-
"helper_ok"
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
before_called = false
|
|
23
|
-
after_called = false
|
|
24
|
-
|
|
25
|
-
Crspec.configure do |config|
|
|
26
|
-
config.include(helper_module)
|
|
27
|
-
config.before(:each) { before_called = true }
|
|
28
|
-
config.after(:each) { after_called = true }
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
group = Crspec.describe "Configured Group" do
|
|
32
|
-
it "uses included module and runs global hooks" do
|
|
33
|
-
expect(custom_helper_method).to eq("helper_ok")
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
runner = Crspec::Runner.new(concurrency: 1, formatter: Crspec::Formatters::NullFormatter.new)
|
|
38
|
-
runner.run([group])
|
|
39
|
-
|
|
40
|
-
assert runner.success?
|
|
41
|
-
assert before_called
|
|
42
|
-
assert after_called
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def test_init_generator_in_non_rails_project_creates_only_spec_helper
|
|
46
|
-
Dir.mktmpdir do |dir|
|
|
47
|
-
spec_dir = File.join(dir, "spec")
|
|
48
|
-
created = Crspec::Generators::Init.generate(spec_dir, dir)
|
|
49
|
-
|
|
50
|
-
assert_equal 1, created.size
|
|
51
|
-
assert File.exist?(File.join(spec_dir, "spec_helper.rb"))
|
|
52
|
-
refute File.exist?(File.join(spec_dir, "rails_helper.rb"))
|
|
53
|
-
|
|
54
|
-
spec_helper_content = File.read(File.join(spec_dir, "spec_helper.rb"))
|
|
55
|
-
assert_includes spec_helper_content, "Crspec.configure"
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def test_init_generator_in_rails_project_creates_both_helpers
|
|
60
|
-
Dir.mktmpdir do |dir|
|
|
61
|
-
FileUtils.mkdir_p(File.join(dir, "config"))
|
|
62
|
-
File.write(File.join(dir, "config", "application.rb"), "# Rails app")
|
|
63
|
-
|
|
64
|
-
spec_dir = File.join(dir, "spec")
|
|
65
|
-
created = Crspec::Generators::Init.generate(spec_dir, dir)
|
|
66
|
-
|
|
67
|
-
assert_equal 2, created.size
|
|
68
|
-
assert File.exist?(File.join(spec_dir, "spec_helper.rb"))
|
|
69
|
-
assert File.exist?(File.join(spec_dir, "rails_helper.rb"))
|
|
70
|
-
|
|
71
|
-
rails_helper_content = File.read(File.join(spec_dir, "rails_helper.rb"))
|
|
72
|
-
assert_includes rails_helper_content, "require_relative \"spec_helper\""
|
|
73
|
-
assert_includes rails_helper_content, "DatabaseIsolation.wrap_example"
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "test_helper"
|
|
4
|
-
|
|
5
|
-
class ExecutionContextTest < Minitest::Test
|
|
6
|
-
def test_fiber_storage_isolation_and_inheritance
|
|
7
|
-
parent_ctx = nil
|
|
8
|
-
sub_fiber_ctx = nil
|
|
9
|
-
|
|
10
|
-
Crspec::ExecutionContext.isolate("ex-1", { type: :model }) do |ctx|
|
|
11
|
-
parent_ctx = ctx
|
|
12
|
-
assert_equal "ex-1", Crspec::ExecutionContext.current.example_id
|
|
13
|
-
|
|
14
|
-
# Sub-fiber created inside example inherits Fiber storage
|
|
15
|
-
Fiber.new do
|
|
16
|
-
sub_fiber_ctx = Crspec::ExecutionContext.current
|
|
17
|
-
end.resume
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
assert_equal parent_ctx.example_id, sub_fiber_ctx.example_id
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def test_per_fiber_lazy_memoization
|
|
24
|
-
Crspec::ExecutionContext.isolate("ex-2") do
|
|
25
|
-
ctx = Crspec::ExecutionContext.current
|
|
26
|
-
count = 0
|
|
27
|
-
val1 = ctx.fetch_memoized(:user) do
|
|
28
|
-
count += 1
|
|
29
|
-
"Jane"
|
|
30
|
-
end
|
|
31
|
-
val2 = ctx.fetch_memoized(:user) do
|
|
32
|
-
count += 1
|
|
33
|
-
"Jane"
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
assert_equal "Jane", val1
|
|
37
|
-
assert_equal "Jane", val2
|
|
38
|
-
assert_equal 1, count
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def test_thread_safety_memoization
|
|
43
|
-
Crspec::ExecutionContext.isolate("ex-3") do
|
|
44
|
-
ctx = Crspec::ExecutionContext.current
|
|
45
|
-
counter = 0
|
|
46
|
-
threads = Array.new(10) do
|
|
47
|
-
Thread.new do
|
|
48
|
-
ctx.fetch_memoized(:shared_calc) do
|
|
49
|
-
sleep 0.01
|
|
50
|
-
counter += 1
|
|
51
|
-
42
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
results = threads.map(&:value)
|
|
57
|
-
assert_equal Array.new(10, 42), results
|
|
58
|
-
assert_equal 1, counter
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
data/test/crspec/mock_test.rb
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "test_helper"
|
|
4
|
-
|
|
5
|
-
class MockTest < Minitest::Test
|
|
6
|
-
class StripeClient
|
|
7
|
-
def charge(amount)
|
|
8
|
-
"real_charge_#{amount}"
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def test_fiber_isolated_stubs
|
|
13
|
-
client = StripeClient.new
|
|
14
|
-
fiber1_result = nil
|
|
15
|
-
fiber2_result = nil
|
|
16
|
-
|
|
17
|
-
f1 = Fiber.new do
|
|
18
|
-
Crspec::Mock::Space.current.register_stub(client, :charge, proc { "stub_fiber_1" })
|
|
19
|
-
fiber1_result = client.charge(100)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
f2 = Fiber.new do
|
|
23
|
-
Crspec::Mock::Space.current.register_stub(client, :charge, proc { "stub_fiber_2" })
|
|
24
|
-
fiber2_result = client.charge(200)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
f1.resume
|
|
28
|
-
f2.resume
|
|
29
|
-
|
|
30
|
-
assert_equal "stub_fiber_1", fiber1_result
|
|
31
|
-
assert_equal "stub_fiber_2", fiber2_result
|
|
32
|
-
assert_equal "real_charge_500", client.charge(500)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def test_double_and_expectation_dsl
|
|
36
|
-
Crspec::ExecutionContext.isolate("mock-test") do
|
|
37
|
-
stubs_mock = Crspec::Mock::Double.new("Stripe", charge: "ok")
|
|
38
|
-
assert_equal "ok", stubs_mock.charge(50)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def test_allow_receive_with_and_return
|
|
43
|
-
group = Crspec.describe "PaymentGateway" do
|
|
44
|
-
it "stubs method" do
|
|
45
|
-
client = StripeClient.new
|
|
46
|
-
allow(client).to receive(:charge).with(5000).and_return("succeeded")
|
|
47
|
-
expect(client.charge(5000)).to eq("succeeded")
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
runner = Crspec::Runner.new(concurrency: 1)
|
|
52
|
-
runner.run([group])
|
|
53
|
-
assert runner.success?
|
|
54
|
-
end
|
|
55
|
-
end
|
data/test/crspec/rails_test.rb
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "test_helper"
|
|
4
|
-
require "minitest/mock"
|
|
5
|
-
|
|
6
|
-
class RailsTest < Minitest::Test
|
|
7
|
-
def setup
|
|
8
|
-
Crspec::Rails::Parallel.reset!
|
|
9
|
-
Crspec.reset!
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def teardown
|
|
13
|
-
Crspec::Rails::Parallel.reset!
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def test_database_isolation_wrapper
|
|
17
|
-
mock_example = Minitest::Mock.new
|
|
18
|
-
mock_example.expect(:execute!, true)
|
|
19
|
-
|
|
20
|
-
Crspec::Rails::DatabaseIsolation.wrap_example(mock_example)
|
|
21
|
-
assert mock_example.verify
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def test_system_server_start
|
|
25
|
-
Crspec::Rails::SystemServer.reset!
|
|
26
|
-
refute Crspec::Rails::SystemServer.running?
|
|
27
|
-
|
|
28
|
-
Crspec::Rails::SystemServer.start_concurrent_server!(nil, 9887)
|
|
29
|
-
assert Crspec::Rails::SystemServer.running?
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def test_rails_parallel_test_setup_and_teardown_hooks
|
|
33
|
-
setup_called = []
|
|
34
|
-
teardown_called = []
|
|
35
|
-
|
|
36
|
-
Crspec::Rails::Parallel.parallelize(workers: 2) do
|
|
37
|
-
parallelize_setup do |worker_num|
|
|
38
|
-
setup_called << worker_num
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
parallelize_teardown do |worker_num|
|
|
42
|
-
teardown_called << worker_num
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
assert Crspec::Rails::Parallel.enabled?
|
|
47
|
-
assert_equal 2, Crspec::Rails::Parallel.worker_count
|
|
48
|
-
|
|
49
|
-
group = Crspec.describe "Parallel Test Group" do
|
|
50
|
-
it "runs example" do
|
|
51
|
-
expect(1).to eq(1)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
runner = Crspec::Runner.new(concurrency: 2)
|
|
56
|
-
runner.run([group])
|
|
57
|
-
|
|
58
|
-
assert runner.success?
|
|
59
|
-
assert_equal [1, 2], setup_called.sort
|
|
60
|
-
assert_equal [1, 2], teardown_called.sort
|
|
61
|
-
end
|
|
62
|
-
end
|
data/test/crspec/runner_test.rb
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "test_helper"
|
|
4
|
-
|
|
5
|
-
class RunnerTest < Minitest::Test
|
|
6
|
-
def setup
|
|
7
|
-
Crspec.reset!
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def test_concurrent_runner_execution
|
|
11
|
-
group = Crspec.describe "User Model" do
|
|
12
|
-
let(:name) { "Alice" }
|
|
13
|
-
|
|
14
|
-
it "validates name" do
|
|
15
|
-
expect(name).to eq("Alice")
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "calculates async property" do
|
|
19
|
-
expect(1 + 1).to eq(2)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
formatter = Crspec::Formatters::NullFormatter.new
|
|
24
|
-
runner = Crspec::Runner.new(concurrency: 2, formatter: formatter)
|
|
25
|
-
runner.run([group])
|
|
26
|
-
|
|
27
|
-
assert runner.success?
|
|
28
|
-
assert_equal 2, runner.passed_examples.size
|
|
29
|
-
assert_equal 0, runner.failed_examples.size
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def test_failing_example_recorded
|
|
33
|
-
group = Crspec.describe "Failing Suite" do
|
|
34
|
-
it "fails expectation" do
|
|
35
|
-
expect(1).to eq(2)
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
formatter = Crspec::Formatters::NullFormatter.new
|
|
40
|
-
runner = Crspec::Runner.new(concurrency: 1, formatter: formatter)
|
|
41
|
-
runner.run([group])
|
|
42
|
-
|
|
43
|
-
refute runner.success?
|
|
44
|
-
assert_equal 1, runner.failed_examples.size
|
|
45
|
-
assert_equal "Expected 2, got 1", runner.failed_examples.first.error.message
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def test_progress_formatter_output
|
|
49
|
-
out = StringIO.new
|
|
50
|
-
formatter = Crspec::Formatters::ProgressFormatter.new(out, color: false)
|
|
51
|
-
|
|
52
|
-
group = Crspec.describe "Formatter Suite" do
|
|
53
|
-
it "passes" do
|
|
54
|
-
expect(1).to eq(1)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "fails" do
|
|
58
|
-
expect(1).to eq(2)
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
runner = Crspec::Runner.new(concurrency: 1, formatter: formatter)
|
|
63
|
-
runner.run([group])
|
|
64
|
-
|
|
65
|
-
assert_includes out.string, "."
|
|
66
|
-
assert_includes out.string, "F"
|
|
67
|
-
end
|
|
68
|
-
end
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "test_helper"
|
|
4
|
-
|
|
5
|
-
class TranspilerTest < Minitest::Test
|
|
6
|
-
def test_prism_ast_rewriting_rspec_to_crspec
|
|
7
|
-
source = <<~RUBY
|
|
8
|
-
RSpec.describe User, type: :model do
|
|
9
|
-
let(:valid_attributes) { { name: "Jane" } }
|
|
10
|
-
it "validates attributes" do
|
|
11
|
-
expect(1).to eq(1)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
RUBY
|
|
15
|
-
|
|
16
|
-
rewriter = Crspec::Transpiler::Rewriter.new(source)
|
|
17
|
-
transformed = rewriter.transpile
|
|
18
|
-
|
|
19
|
-
assert_includes transformed, "Crspec.describe User"
|
|
20
|
-
refute_includes transformed, "RSpec.describe"
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def test_detects_thread_unsafe_before_all
|
|
24
|
-
source = <<~RUBY
|
|
25
|
-
Crspec.describe Account do
|
|
26
|
-
before(:all) do
|
|
27
|
-
@account = Account.create!
|
|
28
|
-
end
|
|
29
|
-
it "tests something" do
|
|
30
|
-
expect(1).to eq(1)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
RUBY
|
|
34
|
-
|
|
35
|
-
rewriter = Crspec::Transpiler::Rewriter.new(source)
|
|
36
|
-
rewriter.transpile
|
|
37
|
-
|
|
38
|
-
refute_empty rewriter.warnings
|
|
39
|
-
assert_includes rewriter.warnings.first, "before(:all) mutates global state"
|
|
40
|
-
end
|
|
41
|
-
end
|