Mocha mocks (заглушка в тестах) по умолчанию не проходит никаких проверок типов. Это умышленно и считается особенностью; голые макеты делают тесты хрупкими и вызывают проблемы при рефакторинге кода, независимо от проверки типов.
При попытке протестировать метод с использованием макета Mocha, который не проходит проверку типа, мы рекомендуем переписать тест, чтобы не использовать mocha. Или:
- Создайте подлинный экземпляр объекта и используйте
.stubs
для замены только определенных методов.
- Напишите вспомогательные функции для создания реальных экземпляров ваших объектов с поддельными данными.
В худшем случае вы можете заглушить is_a?
, чтобы заставить Mocha проходить проверку типа, но, пожалуйста, избегайте этого. Это приводит к хрупким тестам и усложняет анализ кода. Если вы должны:
# NOT RECOMMENDED!
fake_llama = stub
fake_llama.stubs(:llama_count).returns(17)
fake_llama.stubs(:is_a?).with(M::Llama).returns(true)
Я не знаком с различиями между макетами RSpec и mocha (в Stripe, где разрабатывается Sorbet, мы используем Mocha), но принципы должны быть одинаковыми.