Ответ RSpec.тело по-прежнему пусто даже с config.render_views

#ruby-on-rails-3 #rspec #rspec2

#ruby-on-rails-3 #rspec #rspec2

Вопрос:

В моем файле spec_helper.rb я специально установил для него значение config.render_views, но ответ.тело, которое я получаю обратно, по-прежнему пустое. Вот моя базовая спецификация

 describe  "#index" do
    it "should list all rooms" do
      get 'index'
      stub(Person).all
    end

    it "responds with 200 response code" do
      response.should be_ok
    end

    it "renders the index template" do
      pp response.body
      response.should render_template("people/index")
    end

  end
  

Есть ли что-нибудь еще, что могло бы привести к такому поведению? Это нормально, когда я захожу в браузер. Я на Rspec 2.5.0

Ответ №1:

Вы пробовали иметь render_views в вашем файле спецификации контроллера? Это работает для меня.

Еще одна вещь, которую я заметил, это то, что вы обращаетесь к индексной странице только один раз в своих тестовых примерах — первый, если быть точным. Остальное вернет пустое содержимое html, потому что ответа нет.

Вот как я это реализую. Но если у вас уже есть config.render_views в файле *spec_helper.rb * и это работает, вы можете обойтись без render_views в спецификации контроллера.

 describe MyController
    render_views

    before :each do
        get :index
    end

    describe  "#index" do
        it "should list all rooms" do
            stub(Person).all
        end

        it "responds with 200 response code" do
            response.should be_ok
        end

        it "renders the index template" do
            pp response.body
            response.should render_template("people/index")
        end
    end
end
  

Редактировать:
Небольшое изменение здесь — это before большой объект, в котором я вызываю get :index для каждого it блока.

Комментарии:

1. Вы исправили свой код, включив его get :index в каждый it блок?

2. Вам, безусловно, нужно get :index в каждом тесте, или лучше, в before , как показал @Yasky. Ваш stub также ничего не делает в тесте, в котором он находится. Заглушение после get не будет иметь никакого эффекта. Вы также ничего не возвращаете из заглушки.

Ответ №2:

У меня была такая же проблема.

Решением было указать формат запроса.

Например:
get :some_action, some_param: 12121, format: 'json'

Ответ №3:

Это было изменено с RSpec 1 на RSpec 2. Просмотр спецификаций теперь использует rendered вместо response :

rendered.should =~ /some text/

Больше информации в примечаниях к выпуску на github.

Комментарии:

1. Я не в спецификации view, это спецификация контроллера, и в документах все еще показано, что ответ обрабатывается таким образом