Rails: при тестировании контроллеров с RSpec, как мне остановить их от перенаправления? - PullRequest
1 голос
/ 26 января 2010

У меня есть методы контроллера, которые выглядят так:

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

Когда я загружаю это действие в браузер, я получаю то, что ожидаю: {"success":1}

Однако при тестировании с RSpec response.body дает мне '<html><body>You are being <a href="https://test.host/test/testAction">redirected</a>.</body></html>'

Я заметил, что это странное перенаправление происходит со всеми моими контроллерами. Как я могу остановить это перенаправление, чтобы я мог выполнять проверки тела ответа?

Спасибо!

----------------------- РЕДАКТИРОВАТЬ:

Есть идеи, почему происходит следующий сбой теста?

# 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

Ответы [ 3 ]

0 голосов
/ 27 января 2010

Я запутался, почему ваш тестовый вывод говорит «ApiController вызывает метод test () ...», когда ваш пример для TestController. Я запустил несколько собственных примеров и, похоже, получил правильные результаты. Я предлагаю попробовать отладчик Ruby (gem ruby-debug), чтобы диагностировать это. Таким образом, вы можете подтвердить, что вызывается правильный код, а также интерактивно проверить значения.

0 голосов
/ 15 сентября 2011

Измените ваше утверждение на

response.should be_redirect

По крайней мере, если все делает правильно:)

0 голосов
/ 26 января 2010

По определению, вы выполняете модульное тестирование на контроллере и, следовательно, не должны пытаться увидеть, что в ответе, только то, что правильное действие произошло и выполнило все, что оно должно было сделать. Тестирование содержимого ответа - это работа для интеграционного теста, такого как Cucumber.

По сути, попробуйте подтвердить, что контроллер попытался перенаправить.

@response.should be_redirect
...