Spec-Zone.ru › Ruby on Rails 4.1

класс ActionDispatch::IntegrationTest

Родитель:
ActiveSupport::TestCase
Включенные модули:
ActionController::TemplateAssertions, ActionDispatch::Routing::UrlFor

Интеграционный тест охватывает несколько контроллеров и действий, связывая их все вместе, чтобы убедиться, что они работают вместе как ожидается. Он тестирует более комплексно, чем юнит- или функциональные тесты, используя весь стек, от диспетчера до базы данных.

В самом простом случае, вы просто расширяете IntegrationTest и пишете свои тесты, используя методы get/post:

require "test_helper"

class ExampleTest < ActionDispatch::IntegrationTest
  fixtures :people

  def test_login
    # get the login page
    get "/login"
    assert_equal 200, status

    # post the login and follow through to the home page
    post "/login", username: people(:jamis).username,
      password: people(:jamis).password
    follow_redirect!
    assert_equal 200, status
    assert_equal "/home", path
  end
end

Однако, вы также можете иметь несколько сеансов в открытом состоянии на тест, и даже расширять эти сеансы с утверждениями и методами, чтобы создать очень мощный DSL для тестирования, специфичный для вашего приложения. Вы даже можете ссылаться на любые именованные маршруты, которые вы определили.

require "test_helper"

class AdvancedTest < ActionDispatch::IntegrationTest
  fixtures :people, :rooms

  def test_login_and_speak
    jamis, david = login(:jamis), login(:david)
    room = rooms(:office)

    jamis.enter(room)
    jamis.speak(room, "anybody home?")

    david.enter(room)
    david.speak(room, "hello!")
  end

  private

    module CustomAssertions
      def enter(room)
        # reference a named route, for maximum internal consistency!
        get(room_url(id: room.id))
        assert(...)
        ...
      end

      def speak(room, message)
        xml_http_request "/say/#{room.id}", message: message
        assert(...)
        ...
      end
    end

    def login(who)
      open_session do |sess|
        sess.extend(CustomAssertions)
        who = people(who)
        sess.post "/login", username: who.username,
          password: who.password
        assert(...)
      end
    end
end

Публичные Классовые Методы

app() Показать исходный код
# File actionpack/lib/action_dispatch/testing/integration.rb, line 489
def self.app
  @@app || ActionDispatch.test_app
end
app=(app) Показать исходный код
# File actionpack/lib/action_dispatch/testing/integration.rb, line 493
def self.app=(app)
  @@app = app
end

Публичные Методы Экземпляров

app() Показать исходный код
Вызывает метод суперкласса
# File actionpack/lib/action_dispatch/testing/integration.rb, line 497
def app
  super || self.class.app
end
url_options() Показать исходный код
# File actionpack/lib/action_dispatch/testing/integration.rb, line 501
def url_options
  reset! unless integration_session
  integration_session.url_options
end

© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API