2015-06-23 3 views
1

Я читал кучу документации и SO вопросов/ответов на все изменения, как Rspec эволюционировала, хочет быть уверен в ответе ...Rspec 3.X: встроенный встроенный html-помощник? Или нам нужно использовать Капибару?

Моя цель состоит в том, чтобы использование нативных Rspec реек (У меня есть 3.2.2), чтобы делать интегрированные тесты контроллера/просмотра, которые ищут 1) классы CSS и 2) идентификаторы. Другими словами дали этот вид фрагмент кода:

<!-- staticpages/dashboard --> 
<div class="hidden">Something</div> 
<div id="creation">This</div> 

Это должно пройти (однако оно должно быть семантически написано):

describe StaticpagesController do 
    render_views 

    it "should find everything" do 
    get :dashboard 
    expect(response.body).to have_selector("div#creation") 
    expect(response.body).to have_css("hidden") 
    expect(response.body).to_not have_selector("div#nothinghere") 
    end 
end 

Я хотел бы сделать это без дополнительных драгоценных камней, таких как Капибара; это возможно?

Вот высокий уровень, что я узнал до сих пор:

В моих собственных экспериментах, приведенный выше код генерируется:

Expect<long response.body here>.to respond to `has_selector?` 

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

ЕСЛИ это получается, мне нужна Capybara, чтобы сделать эти причудливые матчи, есть ли способ сделать это в моем интегрированном контроллере/спецификации вида? Я понимаю, что я должен добавить type: :feature в линию describe StaticpagesController, чтобы использовать матчи Capybara. Однако, как только я это сделаю, render_views больше не доступен (так как он ограничен type: :controller). Примечание: render_views также умирает, если за этот пост (https://www.relishapp.com/rspec/rspec-rails/v/2-99/docs/controller-specs/use-of-capybara-in-controller-specs), я вручную include Capybara::DSL в свой спецификатор контроллера. Во всяком случае, я очень хотел бы, чтобы не придется переписывать свои текущие функции контроллера в кучу полнометражных спецификации ...

ответ

1

Казалось бы, что вы хотите полнометражных функции (с Капибара) больше, чем контроллер спецификации, как you're not testing any of the things controller specs are typically used to test, такие как:

  • ли шаблон визуализации
  • происходит ли редирект
  • , что переменные экземпляра назначаются в контроллере для совместного использования с целью
  • куки отправляются обратно с ответом

Кроме того, вы, вероятно, захотите рассмотреть возможность написания спецификаций функций для новых приложений по спецификации контроллера с controller tests will probably be dropped in Rails 5 в пользу написания тестов интеграции/функций.

Для описания различных видов спецификаций, которые вы могли бы написать, и для чего они обычно используются, см. this SO answer.

+0

Так что честно говоря, я просто включил часть теста, которая была более «особенностью» в моем фрагменте кода выше. У меня есть обширное тестирование контроллера, которое проверяет правильные переадресации, шаблоны, переменные экземпляра и т. Д. ... но я думаю, если нет другого пути ... – james

+0

Не думайте так. Даже [документация RSpec по спецификациям характеристик] (https://www.relishapp.com/rspec/rspec-rails/docs/feature-specs/feature-spec) говорит, что если вы тестируете прецедент через внешний интерфейс, ориентированный интерфейс, в этом случае веб-страницы, то он должен быть под спецификацией функции. Если по какой-либо причине вы не являетесь поклонником тестирования функций, то я предполагаю, что [просмотр спецификации] (http://www.relishapp.com/rspec/rspec-rails/v/3-3/docs/view-specs) может быть, что вам нужно, если вы просто хотите проверить рендеринг представления ...? Несмотря на это, как и спецификация функции, все равно он должен быть в отдельном файле. –