Alcune funzionalità della mia app funzionano in modo diverso a seconda dell'indirizzo IP del client. C'è un modo per testarlo nei test funzionali di Rails? Sto usando Test :: Unit e Shoulda.In test del controller Rails, esiste un modo per simulare un IP remoto specifico?
risposta
È possibile eseguire questa operazione facilmente senza eseguire lo stub, modificando la variabile di ambiente REMOTE_ADDR prima della chiamata del controller. Ecco un controller immaginario che reindirizza l'utente al percorso casa se il loro indirizzo IP è 1.2.3.4:
def index
if request.remote_ip == '1.2.3.4'
redirect_to root_path
return
end
@articles = Article.all
end
Ecco come è possibile verificare che funziona:
def test_should_reject_ip_1_2_3_4
@request.env['REMOTE_ADDR'] = '1.2.3.4'
get :index
assert_redirected_to root_path
end
Si imposta il telecomando prima della chiamata al controller, quindi sei in grado di simulare quei dati senza plugin o gemme speciali. Ed ecco la versione shoulda, per ItemsController:
context "with ip 1.2.3.4" do
setup do
@request.env['REMOTE_ADDR'] = '1.2.3.4'
get :index
end
should_not_assign_to :items
should_redirect_to("home"){home_path}
should_not_set_the_flash
end
Il controller di ricezione necessita di un metodo per rilevare l'indirizzo IP (o di riceverlo come parametro) e serve un modo per iniettare un indirizzo IP specifico per il test, o semplicemente specificare l'indirizzo IP di test come parametro per il metodo.
Se ciò non è facile considerando qualsiasi cosa l'app, ciò che si potrebbe fare è rendere la "funzionalità personalizzata" applicabile a un altro computer sulla rete domestica, se ne hai uno, e testare l'app in questo modo. Questo però non risolve la risposta "risolvilo attraverso un test unitario".
Posso chiedere perché l'app eseguirà un'azione specifica a seconda dell'indirizzo IP? Forse c'è un altro modo.
Si dovrebbe essere in grado di farlo estinguendo le richieste e restituendo un oggetto fittizio che ha request.remote_ip
uguale all'indirizzo IP desiderato.
Mi piacerebbe dare un'occhiata a FakeWeb per aiuto su questo. Ti consente di impostare facilmente le richieste/risposte previste. Potrebbe anche essere istruttivo guardare come Rails stesso does these kinds of tests.
Utilizzando gioiello "moka" Si può fare:
test "should something" do
request.expects(:remote_ip).returns("189.81.139.183")
...
end
- 1. ASP.NET MVC: esiste un modo per simulare un ViewState?
- 2. Esiste un modo per eseguire il ping di un indirizzo IP specifico con C?
- 3. Python: Ottieni indirizzo IP locale utilizzato per inviare dati IP a uno specifico indirizzo IP remoto
- 4. iOS: esiste un modo per simulare le impostazioni locali dell'utente?
- 5. Simulare un CURL specifico in PostMan
- 6. Come aggiungere un ritardo al controller Rails per il test?
- 7. Esiste un modo specifico per Scala per implementare l'esecuzione periodica?
- 8. Esiste un modo per scrivere test per 500 pagine di errore in Rails?
- 9. Un buon modo per ottenere il nome del controller da un request.referer in Rails
- 10. Test iOS: esiste un modo per saltare i test?
- 11. Rails test del controller rspec vs test di integrazione
- 12. Il modo migliore per simulare un dominio?
- 13. Eseguire sails.js su un indirizzo IP specifico durante lo sviluppo
- 14. Esiste un modo per ignorare un'azione di MVC Controller?
- 15. Verificare se esiste un record dal controller in Rails
- 16. Qual è il modo migliore per ottenere il nome del computer in remoto in base a un indirizzo IP?
- 17. Esiste un modo Rails per verificare quali attributi sono stati aggiornati in un osservatore?
- 18. Esiste un modo per simulare il distacco dall'emulatore del telefono Windows 7?
- 19. Esiste un modo rapido per eliminare un valore specifico da un array in Javascript?
- 20. C'è un modo per disabilitare ReSharper per un file specifico?
- 21. Esiste un modo per simulare operazioni bit a bit su interi per _m256 tipi su AVX?
- 22. Best practice per eventi ActionScript 2: esiste un modo per simulare eventi in stile ActionScript 3?
- 23. expressjs associare a un indirizzo IP specifico
- 24. Yii: rilevamento di tutte le eccezioni per un controller specifico
- 25. C'è un modo per trasformare un IP non elastico in un IP elastico su aws?
- 26. Come chiamare un altro post su un altro controller nel test funzionale di Rails
- 27. Esiste un modo per limitare CPU/memoria di un processo?
- 28. Come verificare un IP di input in un intervallo IP specifico
- 29. Come simulare/stubare un modello nei test di Cetriolo
- 30. Esiste un modo per eseguire unit test per una webapp WebGL in un browser headless
Perché il rilevamento IP: l'applicazione mostra diversi elementi dell'interfaccia utente a seconda se l'utente in all'interno o al di fuori del nostro rete locale. – Ethan