Тест Rack не пройден: пока нет ответа на запрос JSON

Я пытаюсь создать JSON API для моего проекта Ruby, следуя примеру Ticketee, приведенному в книге Иегуды Каца " Rails 3 в действии", глава 13. Вот тест RSpec, описанный на странице 353, адаптированный к моей среде.

# /spec/api/v1/farms_spec.rb # Reduced to the minimum code.
require "spec_helper"
include ApiHelper # not sure if I need this

describe "/api/v1/farms", type: :api do
    context "farms viewable by this user" do
        let(:url) { "/api/v1/farms" }
        it "json" do
            get "#{url}.json"
            assert last_response.ok?
        end
    end
end

Когда я запускаю тест, я получаю следующий вывод...

$ rspec spec/api/v1/farms_spec.rb
No DRb server is running. Running in local process instead ...
Run options: include {:focus=>true}

All examples were filtered out; ignoring {:focus=>true}
  1) /api/v1/farms farms viewable by this user json
     Failure/Error: assert last_response.ok?
     Rack::Test::Error:
       No response yet. Request a page first.
     # ./spec/api/v1/farms_spec.rb:30:in `block (3 levels) in <top (required)>'

Finished in 2.29 seconds
1 example, 1 failure

Вот вспомогательный модуль, который я использую...

# /support/api/helper.rb
module ApiHelper
    include Rack::Test::Methods

    def app
        Rails.application
    end
end

RSpec.configure do |config|
    config.include ApiHelper, type: :api
end

Примечание. Этот вопрос аналогичен тестированию ответов REST-API с помощью Rspec и Rack:: Test.

1 ответ

Решение

Rspec-рельсы, кажется, игнорируют type: :api параметр блока description и обрабатывает все спецификации в /spec/api как спецификации запроса (см. главу спецификации запроса здесь). Может быть, тип-параметр устарел? Я еще не нашел никакой документации для этого..

Я могу заставить ваш пример работать при использовании type: :request вместо type: :api, Я также удалил app-метод, так как он уже включен в RequestExampleGroup по умолчанию.

# /support/api/helper.rb
module ApiHelper
    include Rack::Test::Methods
end

RSpec.configure do |config|
    config.include ApiHelper, type: :request
end

И спецификация:

#/spec/api/v1/farms_spec.rb 
require "spec_helper"

describe "/api/v1/farms" do
    context "farms viewable by this user" do
        let(:url) { "/api/v1/farms" }
        it "json" do
            get "#{url}.json"
            assert last_response.ok?
        end
    end
end
Другие вопросы по тегам