Ho la seguente validazione nel mio ActiveRecord.Come posso testare la convalida dell'inclusione in Rails usando RSpec
validates :active, :inclusion => {:in => ['Y', 'N']}
Sto utilizzando quanto segue per testare le convalide del mio modello.
should_not allow_value('A').for(:active)
should allow_value('Y').for(:active)
should allow_value('N').for(:active)
C'è un più pulito e più attraverso il modo di testare questo? Attualmente sto usando RSpec2 e dovrebbe corrispondere.
EDIT
Dopo un po 'guardando in giro ho solo trovato, questo probabilmente un modo 'ok' di prove, shoulda non prevede nulla per questo e per tutti coloro che lo richiede può scrivere il proprio matcher personalizzato per esso . (E probabilmente contribuire al progetto). Alcuni link a discussioni che potrebbero essere interessanti:
should_ensure_value_in_range
Questo si avvicina a quello che può essere utilizzato, ma accetta solo intervalli e non un elenco di valori. L'abbinatore personalizzato può essere basato su questo.
Per verificare che non consenta altri valori, puoi fare qualcosa del tipo: 'it {should_not allow_value ('?'). Per (: active)}' - come hai detto tu, non puoi controllare tutti i valori possibili, ma facendo questo oltre a controllare tutti i valori consentiti sembra una copertura ragionevole. – bjnord
Il parametro shoulda_matcher a cui si fa riferimento ** funziona ** come originariamente dichiarato, cioè non consente di impostare i valori non nell'array fornito. [Vedi documentazione] (https://github.com/thoughtbot/shoulda-matchers#ensure_inclusion_of). Per buona misura, ho provato questo in un'applicazione Rails e funziona correttamente. –
@LarsLevie - Grazie per il commento. Sembra che abbiano cambiato la convalida per controllare 'disallows_value_outside_of_array?'. Vedi il vecchio https://github.com/thoughtbot/shoulda-matchers/blob/v1.2.0/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb#L86 rispetto a https://github.com/thoughtbot/shoulda- matchers/blob/15abdf066732828034efea751c2937aa81d080fe/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb # L90 –