Тестируете Rails Metal/Rack с помощью RSpec?

Скажем, у меня есть класс Metal с именем Preview. Как мне протестировать его с помощью RSpec?

Когда я пытаюсь:

require 'spec_helper'

describe Preview do

  it "should return the posted content" do
    post "/preview", :content => "*title*"
    response.body.should == "*title*"
  end

end

Я получил:

undefined method `post' for #<ActiveSupport::TestCase::Subclass_1:0x1058b3098>

Кажется, что RSpec не загружает метод :post, если тест явно не для контроллера. Я пытался указать :type => :controller безрезультатно.


person Matt Darby    schedule 15.03.2010    source источник


Ответы (3)


У rspec есть спецификации интеграции, которые обертывают интеграционные тесты rails (которые проходят через стойку). Просто поместите эту спецификацию в ./spec/integration/preview_spec.rb.

person David Chelimsky    schedule 16.03.2010
comment
Бинго. Этот метод где-нибудь описан? Спасибо за RSpec и всю вашу работу, Дэвид. - person Matt Darby; 16.03.2010
comment
Дэвид, это изменилось для Rails 3, или я просто делаю это неправильно? У меня есть исключения, перехватываемые промежуточным ПО через переписанный ActionDispatch::ShowExceptions, но мои интеграционные тесты (даже когда я помещаю их в ./spec/integration/) просто оставляют исключение неперехваченным. - person Steven; 14.03.2011

Я думаю, что лучше проверить с помощью стойки/теста

person shingara    schedule 15.03.2010
comment
Выглядит хорошо, но я не хочу использовать другой тестовый набор/жемчужину только для проверки одного маршрута. Я уверен, вы понимаете. - person Matt Darby; 15.03.2010

В настоящее время (rspec-rails 2.2.0 и rails 3) вы можете добиться этого с помощью Request Specs:

Согласно файлу readme:

Спецификации запросов живут в спецификациях/запросах

[...]

Спецификации запроса смешаны в поведении из интеграционных тестов Rails. Дополнительные сведения см. в документации по ActionDispatch::Integration::Runner.

person ilpoldo    schedule 01.12.2010