9
votes

Comment puis-je affirmer qu'aucun itinéraire ne correspond dans un test d'intégration des rails?

J'ai un test d'intégration RAILS 3 qui teste mes itinéraires. Il contient des tests tels que:

assert_not_recognized('/adfhkljkdhasjklhjkldfahsjkhdf')


0 commentaires

4 Réponses :


9
votes

J'ai fini par faire cela:

  def test_no_routes_match_when_neither_foo_nor_bar_exist
    assert_raises(ActionController::RoutingError) do
      assert_recognizes({}, '/category/this-is-neither-a-foo-nor-a-bar')
    end
  end


5 commentaires

Je ne pense pas que c'est la bonne réponse, au moins comme des rails 4. "Assert_recogniser ({} ..." va échouer si 1) Le chemin donné n'est pas reconnu du tout, ou 2) s'il est reconnu. Mais comme autre chose que {} (qui devrait toujours être le cas, car une voie reconnue contiendra: Action et: Touches de contrôleur).


Je ne me souviens pas vraiment de la version des rails que j'utilisais lorsque j'avais eu cette question. C'était il y a plus de deux ans. :)


Je peux confirmer que cela a travaillé dans des rails 3 (3.2.16), mais échoue dans les rails 4 (4.0.2). Je vais ajouter une autre variante comme réponse séparée.


Dans Rails 5, cela fonctionne pour moi, sauf remplacer l'affirmation reconnaît la déclaration avec le verbe HTTP et l'itinéraire des tests: Obtenez '/ Catégorie / Ceci-Is-NU-NO-A-FOO-NOR-A-BAR'


Je me demande comment tester de manière proprement pour l'indisponibilité du #New ? Il semble que neuf soit traité comme id in autre / nouveau si le routage comprend montrer mais pas nouveau . Je veux interdire la nouvelle / créer et tester rien n'est appelé là-bas.



-1
votes

Avez-vous essayé Method_Missing (sélecteur, * args et bloc) ? Défini ici


0 commentaires

12
votes

Il existe une manière similaire pour vérifier cela dans rails 4 en affirmant sur l'exception URLGenerError : xxx


0 commentaires

2
votes

En appelant #Recognize_Path Vous ne recevrez pas de faux faux fort>. Au lieu de cela, vous obtiendrez une erreur, mais vous avez trouvé l'indice que vous recherchiez.

test "No routes match when neither_foo_nor_ bar exist" do
  begin 
    assert_not(Rails.application.routes.recognize_path(
        'category/this-is-neither-a-foo-nor-a-bar'))
  rescue ActionController::RoutingError => error
    assert error.message.start_with? "No route matches"
  end
end


0 commentaires