Тест Redcarpet Markdown помощник - PullRequest
2 голосов
/ 21 марта 2012

У меня есть помощник по уценке, который выглядит так в application_helper.rb.

Как бы вы написали тест для чего-то подобного? Кроме того, это лучший способ создания простого HTML-кода из уценки?

Спасибо!

def markdown(text)
  Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true).render(text).html_safe
end

1 Ответ

1 голос
/ 21 марта 2012

На ум приходят два варианта:

  1. Заглушка Redcarpet::Markdown и ожидание того, что он должен получить:

    expect(Redcarpet::Markdown).to receive(:new).with(...) # `with` args omitted for brevity
    markdown(text)
    

    Проблема в том, чтосвязь между методом и тестом очень высокая.Реорганизовать метод без проведения теста очень сложно, даже если метод на самом деле функционирует одинаково.

  2. Утверждение правильности выводимого текста напрямую:

    expect(markdown(text)).to eq 'This is markdownified'
    

    Это позволяет вам лучше проводить рефакторинг, но это больше похоже на интеграционный тест, а не на модульный тест, и почти тестирует Redcarpet больше, чем ваш собственный метод.Модульные тесты должны обычно предполагать, что внешние методы, которые они вызывают, работают правильно.

Это один из тех случаев, когда тестирование кажется мне излишним, так как метод является просто тонкой оберткой вокруг другого, иЯ не был бы против не модульного тестирования, а скорее обеспечения того, чтобы у вас был интеграционный тест - если это из-за того, что ваша спецификация будет интеграционным тестом, то это, вероятно, хорошо.

Этов конечном счете, все зависит от вас, вашего рабочего процесса TDD и общих принципов тестирования.

...