Я читал кучу документации и 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
Я хотел бы сделать это без дополнительных драгоценных камней, таких как Капибара; это возможно?
Вот высокий уровень, что я узнал до сих пор:
- в Rspec 1, функция
have_tag
позволила вам сделать это (http://glenngillen.com/thoughts/using-rspec-have-tag) - в Rspec 2,
have_tag
был заменен с Webrat-хhave_selector
(have_tag vs. have_selector) - в Rspec 3, поддержка Webrat была удалена (http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/)
В моих собственных экспериментах, приведенный выше код генерируется:
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
в свой спецификатор контроллера. Во всяком случае, я очень хотел бы, чтобы не придется переписывать свои текущие функции контроллера в кучу полнометражных спецификации ...
Так что честно говоря, я просто включил часть теста, которая была более «особенностью» в моем фрагменте кода выше. У меня есть обширное тестирование контроллера, которое проверяет правильные переадресации, шаблоны, переменные экземпляра и т. Д. ... но я думаю, если нет другого пути ... – james
Не думайте так. Даже [документация 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) может быть, что вам нужно, если вы просто хотите проверить рендеринг представления ...? Несмотря на это, как и спецификация функции, все равно он должен быть в отдельном файле. –