我正在开发一个使用 Ruby on Rails 的博客应用程序。我有一个名为 Essay 的模型,带有 Draper Decorator。我也在使用 MiniTest::Spec 来测试这个应用程序。每篇论文都有一个正文,该正文将作为 Markdown 存储。在 EssayDecorator 中,我有一个名为 body 的方法,它使用 RedCarpet 将 Markdown 呈现为 html。
为了测试这个方法,我写了如下代码:
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 也很陌生。
提前致谢。