На ум приходят два варианта:
Заглушка Redcarpet::Markdown
и ожидание того, что он должен получить:
expect(Redcarpet::Markdown).to receive(:new).with(...) # `with` args omitted for brevity
markdown(text)
Проблема в том, чтосвязь между методом и тестом очень высокая.Реорганизовать метод без проведения теста очень сложно, даже если метод на самом деле функционирует одинаково.
Утверждение правильности выводимого текста напрямую:
expect(markdown(text)).to eq 'This is markdownified'
Это позволяет вам лучше проводить рефакторинг, но это больше похоже на интеграционный тест, а не на модульный тест, и почти тестирует Redcarpet больше, чем ваш собственный метод.Модульные тесты должны обычно предполагать, что внешние методы, которые они вызывают, работают правильно.
Это один из тех случаев, когда тестирование кажется мне излишним, так как метод является просто тонкой оберткой вокруг другого, иЯ не был бы против не модульного тестирования, а скорее обеспечения того, чтобы у вас был интеграционный тест - если это из-за того, что ваша спецификация будет интеграционным тестом, то это, вероятно, хорошо.
Этов конечном счете, все зависит от вас, вашего рабочего процесса TDD и общих принципов тестирования.