Я работаю над приложением для блога с использованием Ruby on Rails. У меня есть модель под названием «Эссе» с декоратором Дрейпера. Я также использую MiniTest :: Spec для тестирования этого приложения. В каждом эссе есть тело, которое будет храниться как Markdown. В EssayDecorator у меня есть метод, называемый телом, который отображает Markdown в html с помощью RedCarpet.Проверка вызова внешней библиотеки в MiniTest
Для того, чтобы проверить этот метод, я написал следующий код:
describe '#body' do
it 'returns html from the markdown' do
essay = FactoryGirl.create(:essay)
@decorated_essay = essay.decorate
markdown = Minitest::Mock.new
@decorated_essay.stub :markdown, markdown do
markdown.expect :render, "<p>Test</p>", [essay.body]
@decorated_essay.send(:body)
markdown.verify
end
end
end
И внутри декоратора У меня есть два метода:
def body
markdown.render(model.body).html_safe
end
def markdown
Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)
end
Этот тест проходит, но кажется странным для меня. Я не хочу проверять, что RedCarpet выполняет свою работу, я просто хочу проверить, что я вызываю метод render.
Есть ли лучшая практика для издевательства такого рода вещей в MiniTest? Я довольно новичок в использовании Mocks и очень новичок в использовании MiniTest.
Спасибо, заранее.
Посмотрите на [rr] (https://github.com/rr/rr) для более гибкой тестовой двойной библиотеки (хорошо сочетаются с MiniTest), а также общее обсуждение того, как макеты, заглушки, шпионы , и прокси-серверы могут помочь вам протестировать ваш код. –