Mam test integracji Rails 3, który testuje moje trasy. Zawiera testy takie jak:Jak mogę potwierdzić, że żadna z tras nie pasuje do testu integracji Rails?
assert_routing(
"/#{@category.url.path}/#{@foo.url.path}",
{ :controller => 'foo', :action => 'show', :category => @category.to_param, :foo => @foo.to_param }
)
Chciałbym również przetestować przypadek, w którym nie powinny pasować żadne trasy. Oczywiście generowanie testów nie ma znaczenia w tym przypadku, więc potrzebuję odwrotności assert_recognizes. Chciałbym być w stanie zrobić coś takiego:
assert_not_recognized('/adfhkljkdhasjklhjkldfahsjkhdf')
pomysłów, krótkie owijania assert_recognizes w bloku assert_raises (co nie jest rzeczywiście tak straszne, że teraz o tym myślę)?
Nie sądzę, że jest to właściwa odpowiedź, przynajmniej od Rails 4. "assert_recognizes ({} ..." nie powiedzie się, jeśli 1) podana ścieżka nie zostanie w ogóle rozpoznana, lub 2) jeśli jest rozpoznany, ale jako coś innego niż {} (co zawsze powinno mieć miejsce, ponieważ rozpoznana trasa będzie zawierała: action i: klucze kontrolera). –
Naprawdę nie pamiętam, której wersji Rails używałem, kiedy miałem ten problem. To było ponad dwa lata temu. :) –
Mogę potwierdzić, że zadziałało to w Rails 3 (3.2.16), ale kończy się niepowodzeniem w Rails 4 (4.0.2). Dodam kolejny wariant jako osobną odpowiedź. – user569825