Как протестировать 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 (не рекомендуется) - добавьте модуль самостоятельно в качестве вспомогательного модуля для спецификаций, а затем включите его самостоятельно, где это необходимо