Types don't make testing in general unnecessary, but it removes a class of error handling that runtime type checking handles for you. You can really trust the types when using Sorbet.
(I also work in a 40m+ loc non-rails ruby codebase that is almost entirely typed with Sorbet.)
(I also work in a 40m+ loc non-rails ruby codebase that is almost entirely typed with Sorbet.)