2015-10-28 2 views
1

Можно ли проверить, если get запросить текст?RSpec для запроса текста запроса

Я знаю, что есть такие хаки, как response.body == 'any string', но это меня не интересует. Мне просто интересно, есть ли способ «RSpec ™».

Имея эту RSpec:

RSpec.describe MyController, type: :controller do 
    controller do 
    def index 
     render text: 'Hellow' 
    end 
    end 

    describe 'rendering' do 
    subject { get :index } 
    it { is_expected.to render_template(text: 'Hellow')} 
    end 
end 

Я хотел бы, чтобы быть в состоянии назвать it { is_expected.to render_template(text: 'Hellow')}. Он поднимает:

Failure/Error: it { is_expected.to render_template(text: 'Hellow') } 
ArgumentError: 
    Unknown key: :text. Valid keys are: :layout, :partial, :locals, :count, :file 

или, может быть, it { is_expected.to render_template('Hellow')}

Failure/Error: it { is_expected.to render_template('Hellow') } 
    expecting <"Hellow"> but rendering with <[]> 

Есть ли способ RSpec ™, чтобы достигнуть этого?

+0

Попробуйте добавить ['render_views'] (https://www.relishapp.com/rspec/rspec-rails/v/2-1/docs/controller-specs/render-views), потому что RSpec [не отображает views] (https://www.relishapp.com/rspec/rspec-rails/v/2-1/docs/controller-specs/do-not-render-views) по умолчанию – gotva

+0

RSpec, похоже, использует 'response.body == «Hellow» в этом [пример] (https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs/anonymous-controller#anonymous-controllers-only-create-resource-routes) – AbM

+0

https://github.com/rspec/rspec-rails/issues/1482: / –

ответ

1

Тестирование expect(response.body).to eq('Hellow') вполне уместно.

Причина: is_expected.to render_template не работает, вы не отрисовки шаблона. Если ваш контроллер пропустил явный вызов render, Rails отобразит для вас шаблон index, и вы можете проверить render_template(:index). Вы могли бы также render template: :foo, а затем проверить render_template(:foo), если хотите визуализировать нестандартный шаблон. Но когда вы render text: 'Hellow', вы не используете шаблоны; вы явно устанавливаете тело ответа на указанный вами текст.

Если вы делаете визуализацию шаблона и хотите протестировать контент, созданный этим шаблоном, то вступает в игру render_views, так как gotva mentioned. Даже тогда вы будете проверять содержимое в response.body, как вы можете видеть в собственных примерах RSpec. Поскольку ваши шаблоны усложняются, спецификации контроллера не подходят для этого, и вы должны начать писать view specs, используя assert_select или что-то подобное.

Смежные вопросы