A small gem consisting of helpers for using Sorbet & RSpec together.
gem 'rspec-sorbet'
In your spec_helper.rb
you need to first add a require
:
require 'rspec/sorbet'
Out of the box if you're using instance_double
, class_double
or object_double
in your specs you'll encounter errors such as the following:
TypeError:
Parameter 'my_parameter': Expected type MyObject, got type RSpec::Mocks::InstanceVerifyingDouble with value #<InstanceDouble(MyObject) (anonymous)>
Caller: /Users/samuelgiles/Documents/Projects/Clients/Bellroy/bellroy/spec/lib/checkout/use_cases/my_use_case.rb:9
Drop the following into your spec_helper.rb
to allow doubles to be used without breaking type checking:
RSpec::Sorbet.allow_doubles!
Using the eq
matcher to compare T::Struct
's might not behave as you'd expect whereby two separate instances of the same struct class with identical attributes are not ==
out of the box. The standalone sorbet-struct-comparable gem may be of interest if you are looking for a simple attribute based comparison that will help make the eq
matcher behave as you expect.
You can customise the handler of Sorbet validation errors if you so desire.
def handler(signature, opts)
raise MyCustomException, "The options were #{opts}"
end
T::Configuration.call_validation_error_handler = handler