2012-03-15 19 views
7

Nel mio progetto Rails 3.2, invio una richiesta HTTP occasionale a http://jsonip.com da Javascript. Ma quando si esegue Cucumber con il tag @javascript, la richiesta viene inviata molto frequentemente. Questo è ovviamente molto indesiderabile e vorrei cancellare tali richieste. Ora, ho pensato che avrei potuto utilizzare la stub_request da webmock per questo, in questo modo:Stubing richieste Ajax in cetriolo/capibara/selenio?

Before do 
    stub_request(:any, /.*jsonip.*/).to_return(:body => '{"ip":"24.104.73.2","about":"/about"}') 
end 

, ma anche con questo posto, jsonip viene chiamato da JavaScript. E così ho trovato che webmock non stuba effettivamente la richiesta Ajax (almeno non con la precedente dichiarazione stub_request).

Qual è il modo giusto per bloccare la richiesta Ajax in una configurazione Cucumber/Capybara/Selenium?

risposta

3

L'unico modo per farlo è modificare l'URL o disabilitare la richiesta a seconda dell'applicazione dell'ambiente in esecuzione.

Non è possibile stub questa richiesta dal lato di prova perché questa richiesta viene effettuata dal browser non dall'applicazione.

Anche come soluzione o soluzione temporanea per il server CI è possibile disabilitare questo URL nel file hosts.

+0

Hmmm, sì ... ho avuto paura di questo. Ora ho potuto farlo funzionare semplicemente generando una variabile Javascript che contiene 0 quando l'ambiente Rails è in sviluppo, 1 quando è test e 2 quando è in produzione. Quindi prevengo la chiamata Ajax al servizio esterno quando la variabile è uguale a 1. Non è la soluzione più bella, ma funziona. Grazie, Iafonov. –

3

A tale scopo è possibile utilizzare https://github.com/oesmith/puffing-billy sbuffando-billy. Lo sto usando per simulare le chiamate JSONP a Recurly nella mia app.

+0

Questo ha funzionato perfettamente per me. Grazie! – Franco