J'essaye de créer un test de RSpec qui détecte si une demande peut planter le contrôleur, habituellement une erreur 500. Donc, je veux être en mesure de faire la distinction entre:Comment faire pour tester qu'une requête ne renvoie pas 500 erreur?
nil.invalid_method # raises NoMethodError
de
params.require(:required_parameter) # raises ActionController::ParameterMissing
dans un contrôleur d'une manière générique. Quand je fais une request
, feature
ou controller
test, il déclenche une exception:
describe "Post", type: :request do
it 'does not crash when no params given' do
post '/posts' # this line launches an exception
expect(page).to_not have_http_status(500)
end
end
Il semble que, avant RSpec (ou Rails je ne sais pas) avaient un comportement différent, semblable à je recherche:
- rails 4 api rspec test http status code 410
- Rspec shows different status code than browser
- How to use HTTP status code symbols in RSpec?
Comment est-ce que je peux faire ceci? Ou comment ferais-tu?
Merci pour votre temps.
@max @spickermann Je ne me suis pas expliqué correctement. Mon but n'est pas de vérifier quelle exception est soulevée. Peut-être que mon contrôleur traite le problème d'une autre manière, c'est-à-dire: il renvoie un message d'erreur à l'intérieur du code HTML. Pour cette raison, je veux un * moyen générique * pour détecter qu'il n'y a pas une 'erreur de codage'. Rails utilise des exceptions pour gérer plusieurs situations qui ont le bon code comme 'ActionController :: ParameterMissing', à cause de cela je ne peux pas utiliser' except {...} .to_not raise_exception'. –