Domanda

Ho metodi di controller che assomigliano a questo:

class TestController < ApplicationController
  def testAction
    render :json => { 'success'=>1 }.to_json
  end
end

Quando carico questa azione nel browser, ottengo quello che mi aspetto: {"success":1}

Durante il test con RSpec, tuttavia, response.body mi dà '<html><body>You are being <a href="https://test.host/test/testAction">redirected</a>.</body></html>'

Ho notato che questo reindirizzamento strano sta accadendo con tutti i miei controllori. Come posso fermare questo reindirizzamento accada, in modo da poter eseguire controlli sul corpo di risposta?

Grazie!

----------------------- EDIT:

Qualsiasi idea del perché il seguente fallimento del test sta succedendo?

# app/controllers/test_controller.rb
def test
  flash[:notice] = 'test'
end

# spec/controllers/test_controller_spec.rb
describe TestController, "calling the test() method" do
  it "should set the flash notice" do
    put :test
    flash[:notice].should_not be_blank
  end
end

# result
'TestController calling the test() method should set the flash notice' FAILED
expected blank? to return false, got true
È stato utile?

Soluzione

Cambia la tua asserzione di essere

response.should be_redirect

Almeno, se si sta facendo la cosa giusta:)

Altri suggerimenti

Sono confuso perché la vostra uscita di test dice 'ApiController chiamando il metodo di prova () ...', quando il tuo esempio sembra essere per TestController. Ho eseguito un paio di esempi di mio e mi sembra di ottenere i risultati corretti. Io suggerisco di provare il debugger Rubino (gemma ruby-debug) per diagnosticare questo. In questo modo si può confermare che il codice corretto viene chiamato così come in modo interattivo controllare i valori.

Per definizione, si esegue un test di unità sul controller e quindi non dovrebbe cercare di vedere cosa c'è nella risposta, ma solo che l'azione corretta è successo e ha fatto tutto che doveva fare. Testare il contenuto della risposta è un lavoro per un test di integrazione, come cetriolo.

In sostanza, provare affermando che il controllore ha tentato un reindirizzamento.

@response.should be_redirect
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top