Как я могу добавить методы запроса для спецификации характеристик в Rails? - PullRequest
0 голосов
/ 08 мая 2018

У меня есть простая функция тестирования, которая называется test_feature_spec.rb:

(это просто для того, чтобы перейти к сути этого SO вопроса ... реальные спецификации гораздо длиннее, реальные характеристики)

require "features_helper"

RSpec.feature "Simple Feature", type: :feature do
  scenario "a test scenario" do
    get "/"
  end
end

Я могу делать различные вещи Rails-y, включая вещи, управляемые капибарой (например, visit such_n_such_path). Однако вышеперечисленное вылетает:

Failures:

  1) Simple Feature a test scenario
     Failure/Error: get "/"

     NoMethodError:
       undefined method `get' for #<RSpec::ExampleGroups::SimpleFeature:0x000000011a799788>
       Did you mean?  gets
                      gem

Если я просто поменяю его с type: :feature на type: :request, все будет работать нормально:

> rspec spec/features/test_feature_spec.rb
.

Finished in 0.64913 seconds (files took 5.82 seconds to load)
1 example, 0 failures

Кажется, что с type => request Rails или Rspec загружает некоторые вещи, чтобы разрешить вызов маршрутов контроллера, но это не с type => feature.

Есть ли способ загрузить эти вспомогательные методы (например, get и post и т. Д.), Но при этом оставить функцию как type: :feature?

Я знаю, что я мог бы просто изменить его на type: :request, но технически это технические характеристики, хотя для некоторых из них, чтобы установить какое-либо состояние или сделать что-либо, они должны вызывать определенные URL-адреса.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Похоже, что есть решение, которое работает:

https://stackoverflow.com/a/24353475/1218280

Причина, по которой я спросил это, немного странная. В настоящее время я реорганизую некоторые тесты Cucumber, чтобы они стали спецификациями Rspec. Некоторые из них выполняли команды get или post для конечных точек в нашем приложении в качестве шагов «настройки». Например, существует конечная точка для включения определенного флага в записи БД. Я мог бы просто установить объект DB с установленным флагом, но я хотел как можно больше оставаться верным исходному коду Cucumber (по крайней мере, сначала).

Так что теперь я могу сделать это (и это работает):

require "features_helper"

RSpec.feature "Simple Feature", type: :feature do
  scenario "a test scenario" do
    session = ActionDispatch::Integration::Session.new(Rails.application)
    response = session.get("/")
    # or I could do: session.post("/api/xyz", params: { one: "one", two: "two" })
  end
end
0 голосов
/ 08 мая 2018

В вашем spec_helper вы можете попробовать:

RSpec.configure do |config|
  config.include FeaturesHelper, :type => :request
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...