Запустить спецификацию из другой спецификации? - PullRequest
0 голосов
/ 22 января 2019

У меня есть такая характеристика:

it "creates a new deal"
  # visit 'new' page
  # use capybara to fill out lots of form fields and hit submit
  # test all the values of the created Deal object
end

Я хочу, чтобы моя следующая спецификация проверила это it "redirects to the show page for the newly created deal", и я бы хотел, чтобы он просто выбрал, где остановилась последняя спецификация, и протестировал current_path.

Есть ли способ сказать "запусти эту другую спецификацию и добавь к ней эти ожидания"? Вместо вставки во всех направлениях из другой спецификации.

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Вы также можете использовать общие примеры в своих спецификациях для повторного использования.

Rspec.shared_examples "submits a new deal" do |needed_params| 
  # visit 'new' page
  # use capybara to fill out lots of form fields and hit submit

  it "has the correct values" do 
    # test all the values of the created Deal object 
  end
end

И в своем коде вы можете использовать его во вложенном контексте, например:

it_behaves_like "submits a new deal", "params1"

или включите его в текущий контекст, используя:

include_examples "submits a new deal", "params"

См .: https://relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples

0 голосов
/ 23 января 2019

Я хочу, чтобы моя следующая спецификация проверила, что она "перенаправляет на страницу показа для только что созданной сделки", и я бы хотел, чтобы она просто выбрала, где остановилась последняя спецификация, и проверила current_path.

Вы можете использовать общие контексты для совместного использования шагов настройки, разрешения блоков и т. Д.

RSpec.shared_context "authenticated" do
  let(:user){ create(:user) }
  before do
    login_as(user, scope: :user)
  end
end

Вы также можете использовать общие примеры если вам нужно проверить одно и то же поведение в нескольких случаях.

RSpec.shared_examples "requires authentication" do
  before { do_request }
  it "redirects the user to the login page" do
     expect(response).to redirect_to('/login')
  end
end

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

0 голосов
/ 23 января 2019

Я предпочитаю группировать эти поведения в модуле и включать его в свои характеристики.

В вашем случае я бы создал spec/features/common.rb модуль

# frozen_string_literal: true

module Features
  module Common
    def submit_new_deal
      # visit 'new' page
      # use capybara to fill out lots of form fields and hit submit
    end
end

и включите его в spec/rails_helper.rb следующим образом:

 # Include common functionality for features
 config.include Features::Common, type: :feature

Наконец, повторно используйте его в спецификациях:

it "creates a new deal"
  submit_new_deal
  # test all the values of the created Deal object
end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...