Как протестировать ActionText с помощью RSpec?

Я пытаюсь написать системный тест RSpec, который включает заполнение поля ActionText / Trix на странице.

Кажется как будто ActionText::SystemTestHelper как определено здесь, можно помочь с этой задачей, но до сих пор у меня не было никакого успеха в ее реализации.

Мой тест RSpec выглядит следующим образом:

# spec/system/add_job_posting_spec.rb

require 'rails_helper'

RSpec.describe 'adding a job posting', type: :system do
  let(:user) { FactoryBot.create :user }

  before do
    login_as(user)
    visit new_job_posting_path
  end

  context 'with valid information' do
    let(:valid_job_posting) { FactoryBot.create :job_posting }

    scenario 'creates a job posting', js: true do
      fill_in 'Title', with: valid_job_posting.title
      fill_in_rich_text_area 'Description', with: 'Job Info'

      click_button 'Submit'
      expect(page).to have_content 'Job was successfully created.'
    end
  end
end

Я также попытался создать файл поддержки RSpec как таковой

# spec/support/action_text.rb

RSpec.configure do |config|
  config.include ActionText::SystemTestHelper, type: :system
end

Когда я запускаю это с помощью

bundle exec rspec spec/system/add_job_posting_spec.rb

Я получаю следующую ошибку неинициализированной константы ActionText::SystemTestHelper

Когда я пытаюсь удалить файл, расположенный на spec/support/action_text.rb Я получаю эту ошибку вместо:

неопределенный метод "fill_in_rich_text_area"

Я также пытался просто использовать обычный fill_in Метод RSpec, чтобы избежать этого полностью, но затем получить:

Невозможно найти поле "Описание", которое не отключено

Несмотря на то, что тест помечен как js: true и у меня есть другой файл поддержки RSpec для обработки того, что настроено следующим образом:

# spec/support/system/driver.rb

RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by :rack_test
  end

  config.before(:each, type: :system, js: true) do
    ActiveRecord::Base.establish_connection
    driven_by :selenium_chrome_headless
  end
end

3 ответа

В spec/rails_helper.rb:

Требуйте вспомогательный файл и включите модуль в спецификации системы:

      require "action_text/system_test_helper"

RSpec.configure do |config|
  config.include ActionText::SystemTestHelper, type: :system
end

Теперь вы можете использовать fill_in_rich_text_areaпомощник в спецификациях вашей системы:

      fill_in_rich_text_area "page_content", with: "Some content."

…куда "page_content"это идентификатор трикс-редактора.

Область расширенного текста также можно найти по значению атрибута placeholder, значению атрибута aria-label, тексту из его метки или по имени его ввода.

Первый аргумент можно опустить, если у вас есть только один редактор на странице, например:

      fill_in_rich_text_area with: "Some content."

Вот сценарий, который я использую (просто включите его как помощник):

def fill_in_trix_editor(id, with:)
  find(:css, "##{id}").click.set(with)
end

ActionText создает подчеркнутый идентификатор атрибута модель +. Вы также можете осмотреть, чтобы увидеть.

Я не уверен на 100%, но похоже, что ActionText::SystemTestHelperвероятно, еще не выпущен в "стабильную" версию Rails. Вероятно, он выйдет со следующим (или, может быть, вы используете более старую версию, которая еще не содержит его).

Вы можете попробовать следующее:

  • обновите версию Rails и посмотрите, поможет ли это
  • использовать текущий master Версия Rails с github (не рекомендуется)
  • добавьте модуль самостоятельно в качестве вспомогательного модуля для спецификаций, а затем включите его самостоятельно, где это необходимо
Другие вопросы по тегам