Как я могу запустить несколько тестов для одной загрузки контроллера или загрузки страницы Capypara в RSpec? - PullRequest
2 голосов
/ 03 февраля 2012

Я хотел бы протестировать несколько аспектов поведения контроллера или страницы как отдельные тесты, но ускорить мои тесты, но только запуск загрузки страницы контроллера или капибары один раз для нескольких проверок.Например, при тестировании контроллера:

      it "should include all videos in the list of all videos" do
        get :show, id: event.id
        response.should be_somehow
      end

      it "should set the main video to be the paid video" do
        get :show, id: event.id
        response.should be_somehow_else
      end

Я бы хотел, чтобы это стало:

      before :all do
        get :show, id: event.id
      end

      it "should include all videos in the list of all videos" do
        response.should be_somehow
      end

      it "should set the main video to be the paid video" do
        response.should be_somehow_else
      end

Проблема в том, что RSpec очищает объект ответа (или для капибары).Объект страницы) после каждого теста.Итак, проверяю ли я assigns в тестах контроллера, response объекты или page результаты в Капибаре, ничего подобного не работает:

before :all do
  get :show, id: event.id
  @response = response
end
example "it should do something" do
  @response.should be_somehow # test works
end
example "it should do something else" do
  @response.should be_somehow_else # test fails; @response has been flushed by Rails testing facilities
end

Так что решение для ускорения теста состоит в том, чтобы иметь несколькопроверяет в одном тесте:

example "it should be totally correct in every way" do
  get :show, id: event.id
  response.should be_somehow # test works
  response.should be_somehow_else # test works
end

Но это оскорбляет мою чувствительность к именованию тестов.

Это, безусловно, самое отягчающее в Капибаре, в которой у меня может быть многошаговая настройка(вход в систему, разрешение) и 15 проверок при загрузке одной страницы: все ли правильно?Разве другие, неправильные вещи не показывали?Связаны ли действия JavaScript с правильными вещами?Правильный шаблон основы был предоставлен?Эти тесты быстро превращаются в 20 непрерывных строк операторов should со встроенными комментариями Ruby, поэтому я могу вспомнить, что я тестирую, и это просто беспорядок.

Прежде чем все скажут мне не поддерживать состояние теста от теста допроверить, это не то, что я делаю: я хочу проверить независимые переменные, связанные с одним состоянием.

Спасибо

1 Ответ

0 голосов
/ 03 февраля 2012

Это похоже на отличное время для видеомагнитофона, чтобы войти в изображение.Например:

before :all do
  event = Event.create
  VCR.use_cassette('show_event') do
    make_http_request(:get, "http://localhost:3000/event/#{event.id}")
    make_http_request(:get, "http://localhost:3000/#{event.id}")
  end
end

it "should include all videos in the list of all videos" do
  use_vcr_cassette "show_event"
  response.should be_somehow
end

it "should set the main video to be the paid video" do
  use_vcr_cassette "show_event"
  response.should be_somehow_else
end

Это сделает запрос до того, как будут выполнены все (не каждый) тесты, сохранит его в YAML, а затем выберет YAML для каждого теста.

Это уменьшает ваши накладные расходы, переходя на границы ввода-вывода вместо стойки / среды.

...