2012-03-21 3 views
2

J'ai une aide à la démarque qui ressemble à ceci dans application_helper.rb.Test Redcarpet Markdown helper

Comment voulez-vous écrire un test pour quelque chose comme ça? Aussi, est-ce la meilleure façon de générer du HTML simple à partir de démarques?

Merci!

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

Répondre

1

Deux possibilités viennent à l'esprit:

  1. bouchonner Redcarpet::Markdown et créer une attente de ce qu'elle devrait recevoir:

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

    Le problème ici est que le couplage entre la méthode et le test est très élevé. Il est très difficile de refactoriser la méthode sans casser le test, même si la méthode fonctionne de la même manière.

  2. Assertion l'exactitude du texte de sortie directement:

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

    Cela vous permet de refactoring mieux, mais il semble plus comme un test d'intégration, pas un test unitaire, et teste presque Redcarpet plus que votre propre méthode. Les tests unitaires doivent généralement supposer que les méthodes externes qu'ils appellent fonctionnent correctement.

C'est l'un de ces cas où les tests me sent redondant puisque la méthode est juste une enveloppe mince autour d'un autre, et je ne serais pas contre pas les tests unitaires, et plutôt veiller à ce que vous avez un test d'intégration -si c'est en ayant votre spécification être un test d'intégration, alors c'est probablement correct. En fin de compte, cela dépend de vous, de votre flux de travail TDD et des principes généraux de test.

+0

Je faisais cette méthode pour mon propre test d'application et j'ai reçu un avertissement de désapprobation à propos de 'should' de rspec-expectations et j'utilise la méthode' expect' à la place. Y a-t-il une méthode pour passer avec 'expect'? –

+1

@RodrigoArgumedo La syntaxe attendue n'était pas là quand j'ai écrit cette réponse, mais je l'ai mise à jour pour utiliser la nouvelle syntaxe. –

Questions connexes